我想为以下原始 SQL 编写 CodeIgniter 活动记录查询:
select *
from bookdetails
where editionId=$edid1
or editionId=$edid2
下面是我的 CodeIgniter 尝试。
public function get_rare_outofprintBooks($edid1,$edid2)
{
$this->load->database();
$query = $this->db
->get_where(
'bookdetails',
array('edition_id' => $edid1),
array('edition_id' => $edid2)
); // I tried like this but its NOT Working
if ($query->num_rows() > 0) {
foreach ($query->result() as $row) {
$data[] = $row;
}
return $data;
}
return false;
}
$this->db->where('editionId', $edid1);
$this->db->or_where('editionId', $edid2);
它就在文档中http://ellislab.com/codeigniter/user-guide/database/active_record.html
$this->db->where('id',3);
$this->db->or_where('id',5);
参考这里
您正在检查是否在特定列中找到两个值之一。 最明智的做法是使用
IN
条件。 查询生成器方法称为 where_in()
。
所有的后查询处理都是完全可以省略的。 只需返回生成的零个或多个对象的数组。 我从不从模型方法返回
false
,否则会返回二维数组。
如果您的
$edid
变量是字符串,请使用 string
键入提示两个参数;如果它们是整数,请键入提示作为 int
作为最佳实践。
您实际上不需要将自己限制为两个参数。 使用 spread/splat 运算符,您的方法可以接受可变数量的参数,并且为了方便/实用,这些值可以作为平面字符串数组进行访问。
在下面的方法中添加了一个保护条件,因为如果没有传入任何参数,则
where_in()
将生成包含IN ()
的无效查询(空的IN条件将破坏查询)。
public function getRareOutOfPrintBooks(int ...$editionIds): array
{
if (!$editionIds) {
return [];
}
return $this->db
->where_in('edition_id', $editionIds)
->get('bookdetails')
->result();
}
可以使用可变数量的参数来调用上述方法,例如:
$results = $this->YourModelName->get_rare_outofprintBooks($id1);
$results = $this->YourModelName->get_rare_outofprintBooks($id1, $id2);
$results = $this->YourModelName->get_rare_outofprintBooks($id1, $id2, $id3);
尽管如此,如果您想传递可变数量的版本 ID,模型方法直接接受数组而不是潜在的多个参数可能更有意义。
public function getRareOutOfPrintBooks(array $editionIds): array
{
if (!$editionIds) {
return [];
}
return $this->db
->where_in('edition_id', $editionIds)
->get('bookdetails')
->result();
}