如何在Code Igniter查询中简明地返回第一个结果?

时间:2012-03-19 22:03:54

标签: php codeigniter

我尝试返回一个对象,该对象表示根据模型中的ID检索到的日记。

public function getJournal($id) {
    $query = $this->db->query("SELECT * FROM journals WHERE id='$id'");
    return ($query->num_rows() == 1) ? ($query->result())[0] : NULL;
}

但是,PHP发出错误,声明意外打开右括号([)。

我最终实际上循环遍历1个对象实体的数组以返回它,这很愚蠢但有效。

public function getJournal($id) {
    $query = $this->db->query("SELECT * FROM journals WHERE id='$id'");
    if ($query->num_rows() == 1) {
        foreach ($query->result() as $journal)
            return $journal;
    }
    else
        return NULL;
}

返回此对象的更简洁方法是什么?

4 个答案:

答案 0 :(得分:8)

不要抓取result(),只需使用row()方法:

$first_result = $query->row();

答案 1 :(得分:3)

public function getJournal($id)
{
    return $this->db->where('id', $id)->get('journals')->row() ?: NULL; // (requires PHP 5.3)
}

答案 2 :(得分:1)

首先,您应该将查询限制为1:

SELECT * FROM journals WHERE id='$id' LIMIT 1

其次,它说明有一个意想不到的开放右支架的原因。这是因为codeigniter中的result方法返回一个对象而不是一个数组。你可以使用->result_array();如果你想要那样......但如果你决定限制为1,你也可以返回对象...

祝你好运

答案 3 :(得分:1)

public function getJournal($id) {
    $id = (int) $id;
    $query = $this->db->query("SELECT * FROM journals WHERE id = $id limit 1");
    if ($query->num_rows() == 1) {
        return $query->row();
    }
    return NULL;
}