【问题标题】:How to return an object instead of array in Codeigniter?如何在 Codeigniter 中返回对象而不是数组?
【发布时间】:2019-10-30 03:11:30
【问题描述】:

当我尝试获取对象返回时,我在 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();,但它不起作用,我该怎么办?非常感谢。

【问题讨论】:

  • 试试 $query->result()
  • @Saeed.Gh 试过了,还是一样
  • 提供您的结果以及您使用的 Codeigniter 版本
  • @Saeed.Gh v3,顺便说一句,来自文档,resualt()===result_object()
  • result_object() 提供什么?错误/空对象?

标签: php arrays codeigniter object


【解决方案1】:

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

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

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

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

$sql应该是数组或对象,但实际上它返回一个像这样的多维数组

返回 result() 或 result_object()

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

)

返回结果数组()

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

)

这很奇怪。

【讨论】:

    【解决方案2】:

    在codeigniter中$query->result_array();用于以数组格式返回结果。

    要以对象格式获取结果,请使用 $query->result(); 类似

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

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

    【讨论】:

      【解决方案3】:

      也许你需要 json_encode 中的 JSON_FORCE_OBJECT。

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

      【讨论】:

        猜你喜欢
        • 2020-06-29
        • 1970-01-01
        • 2016-01-23
        • 2020-04-11
        • 2018-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-30
        相关资源
        最近更新 更多