寻找'最整洁的'从数据库中读取一条记录的方法(编码器)


Looking for the 'neatest' way of reading exactly one record from database (codeigniter)

上面描述的问题不能被认为是"高优先级",但它仍然困扰着我。

假设我需要从数据库中检索数据。我很确定,数据在那里,因为如果不是,整个应用程序就会崩溃。但我并不是要读"一系列结果",只是一个结果。那么,实现这一目标的"最简洁"方式是什么呢?

我的应用程序建立在编码器框架上,通过利用活动记录,这是迄今为止我想到的最好的:

$result = $this->db->from('some_table')->where('id',$id)->get()->result();
$record = $result[0];

我知道我可以设计查询有点不同(也许更短),例如通过使用get_where(…),但最终它仍然是一个"双行"。这可能是一个"奢侈"的问题,但我有点讨厌这段代码的"外观"。有没有一种方法可以让它变成一句"俏皮话"?

另一方面……如果你认为这是糟糕的编程,我根本不应该这样做,告诉我为什么,我应该做什么。

非常感谢您的意见!

CI原生方式:

$record = $this->db->from('some_table')->where('id',$id)->get()->row();

你可以走了

编辑

更简洁的方式:

$record = $this->db->get_where('some_table', "id = '$id'")->row();
如果值是整数,

'$id'不需要加引号,比如这里。

代替

$result = $this->db->from('some_table')->where('id',$id)->get()->result();
$record = $result[0];
使用

$record = reset($this->db->from('some_table')->where('id',$id)->get()->result());

同样的东西可以用来获得第一行的第一个字段(只要你的编码器返回记录作为数组,我不知道,因为我从未使用过CI)

$firstfield = reset(reset($this->db->from('some_table')->where('id',$id)->get()->result()));

欢呼

使用array_slice():

$record = array_slice($this->db->from('some_table')->where('id',$id)->get()->result(), 0, 1);

使用array_shift():

$record = array_shift($result = $this->db->from('some_table')->where('id',$id)->get()->result());

使用reset():

$record = reset($this->db->from('some_table')->where('id',$id)->get()->result());

$record = $this->db->from('some_table')->where('id',$id)->get()->result()[0];

我个人最喜欢的仍然是array_slice(),因为它允许你得到任何你想要的索引,不与引用工作,不改变数组的内部指针位置。但是,所有这些解决方案都要求您弄清楚如果$result不是一个数组(假设您不想要警告)会发生什么。

看看其他选择,有时两行比一行好。