我正在考虑效率,但我不太确定这一点。
但是我有一堆多列的行。我只需要所有行中的名称字段,其中某个其他键是某个值。我可以像这样得到所有这些行:
$this->db->where('res_id', $res_id);
$q = $this->db->get('products');
return $q->result();
然后我可以遍历它返回的数组,并且只使用每个对象的名称方法,如下所示:
foreach($returned_value as $fun):
echo $fun->name;
endforeach;
但我想知道,只从每一行中选择名称属性是否会更有效,而且我觉得问这个问题很愚蠢,因为我一直在使用活动记录,但我该如何解决这个问题。我意识到我可以使用
$this->db->query()
函数将其写出来,但是有没有办法使用主活动记录命令来指定它?
$this->db->select('name');
$this->db->from('tblNAME');
$this->db->where('res_id', $res_id);
return $this->db->get()->result();
我认为它更快、更高效,因为您不会退回所有东西。
未经测试
这是我使用的一个经过测试的函数,您可能会发现很好的参考
function get($id = null)
{
$this->db->select('id, Username, First_Name, Last_Name, Role, Email');
$this->db->from('user');
if (!is_null($id)) $this->db->where('id', $id);
$this->db->order_by('id', 'desc');
return $this->db->get()->result();
}
CI3 和 CI4 都不提供活动记录方法来将数据列与查询结果集隔离。最简单的编程方式是在 2d 结果集上调用
array_column()
。
public function getProductNamesById(int $res_id): array
{
return array_column(
$this->db->select('name')
->get_where('products', ['res_id', $res_id])
->result(),
'name'
);
}