Php 如何在CodeIgniter查询中简洁地返回第一个结果?

Php 如何在CodeIgniter查询中简洁地返回第一个结果?,php,codeigniter,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个

我试图返回一个表示根据模型中的日志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;
}

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

不要获取
结果()
,只需使用
行()
方法:

$first_result = $query->row();

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

SELECT * FROM journals WHERE id='$id' LIMIT 1
第二,它声明有一个意外的右括号打开的原因。这是因为codeigniter中的result方法返回一个对象而不是数组。如果需要,您可以使用
->result_array();
。但是如果您决定限制为1,您也可以返回该对象

祝你好运

array\u pop()
(最后一个元素)或
current()
(第一个元素)。如果你不确定数组的内部引用指针的位置,也可以使用
reset()
跳转到第一个元素并返回它。不要使用
array\u pop()
——这是破坏性的。
end()
当前()
的对应项。无论如何,请使用DB驱动程序的方法来执行此操作。您可以使用row_array()方法仅将第一行作为数组返回(相当于row()/results()用于对象),而user1276505的row()方法是从对象获取实际结果的好方法。请记住,它还返回对象,而不是数组。
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;
}
public function getJournal($id)
{
    return $this->db->where('id', $id)->get('journals')->row() ?: NULL; // (requires PHP 5.3)
}