如何在Codeigniter中返回一个对象而不是数组?

vq8itlhq  于 2022-12-07  发布在  其他
关注(0)|答案(4)|浏览(98)

当我试图获取对象返回时,我在Codeignter中遇到了一个问题,一些控制器代码是

$sql = $this->user_model->userdetail($data);
    if ($sql) {
        echo json_encode(array(
            "status" => "0",
            "message" => "",
            "data" => $sql
    ));
    exit();
}

型号代码是

function userdetail($data) {
    $id = $data["id"];
    $sql = "select email, name from user where id='".$id."'";
    $query = $this->db->query($sql);
    if ($query->num_rows() > 0) {
        return $query->result_array();
    }
    return $query->num_rows();
}

我可以得到结果

{
    "status": "0",
    "message": "",
    "data": [
    {
        "email": "lily@email.com",
        "name": "lily"
    }
    ]
}

这里的data是一个数组,但它应该是一个对象,上面的结果应该是这样的

{
    "status": "0",
    "message": "",
    "data": {
        "email": "lily@email.com",
        "name": "lily"
    }
}

我在模型代码中将return $query->result_array();改为return $query->result_object();,但是它不起作用,我该怎么办?非常感谢。

vsdwdz23

vsdwdz231#

您的问题是您正在使用result_array()。您必须改用row()row() 函数将为您提供对象而不是数组。
型号代码:

function userdetail($data) {
    $id = $data["id"];
    $sql = "select email, name from user where id='".$id."'";
    $query = $this->db->query($sql);
    return $query->num_rows() > 0 ? $query->row() : 0;
}
wf82jlnq

wf82jlnq2#

我想我找到原因了,在模型

return $query->result_array(); // also can be changed to return $query->result_object(); or return $query->result();

它们可以返回数组或对象,并在控制器文件中

$sql = $this->user_model->userdetail($data);

$sql应该是数组或对象,但实际上它返回的多维数组如下所示
返回结果()或结果对象()

Array
(
    [0] => stdClass Object
        (
            [email] => lily@email.com
            [name] => lily
        )

)

返回结果数组()

Array
(
    [0] => Array
        (
            [email] => lily@email.com
            [name] => lily
        )

)

真奇怪。

xriantvc

xriantvc3#

在codeigniter中,$query->result_array();用于以数组格式返回结果。
要获取对象格式的结果,请使用$query->result();,如

if ($query->num_rows() > 0) {
        return $query->result();
    }

对于单行,使用$query->result_array()

vi4fp9gy

vi4fp9gy4#

也许您需要在json_encode中使用JSON_FORCE_OBJECT。

echo json_encode(array(
        "status" => "0",
        "message" => "",
        "data" => $sql), JSON_FORCE_OBJECT);

相关问题