我尝试返回一个对象,该对象表示根据模型中的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;
}
返回此对象的更简洁方法是什么?
答案 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;
}