CodeIgniter 查询返回列值与两个限定值之一匹配的行

问题描述 投票:0回答:3

我想为以下原始 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;
}
php mysql codeigniter query-builder where-in
3个回答
4
投票
$this->db->where('editionId', $edid1);
$this->db->or_where('editionId', $edid2); 

它就在文档中http://ellislab.com/codeigniter/user-guide/database/active_record.html


3
投票
$this->db->where('id',3);
$this->db->or_where('id',5);

参考这里


0
投票
  • 您正在检查是否在特定列中找到两个值之一。 最明智的做法是使用

    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();
}
© www.soinside.com 2019 - 2024. All rights reserved.