【问题标题】:How to write a query in CodeIgniter Active Record如何在 CodeIgniter Active Record 中编写查询
【发布时间】:2011-03-06 13:20:24
【问题描述】:

我在获取 codeigniter 活动记录以生成如下查询时遇到了一些问题:

SELECT fruits.* FROM fruits
WHERE fruits.color = 'red'
AND ( fruits.size = 'medium' OR fruits.name = 'kiwi' OR fruits.length = 7 );

基本上我想要几个 or 子句,但只有一个 where 子句总是强制执行。

$this->db->select( 'fruits.*' );
$this->db->from( 'fruits' );
$this->db->where( 'fruits.color', 'red' );
$this->db->or_where( 'fruits.size', 'medium' );
$this->db->or_where( 'fruits.name', 'kiwi' );
$this->db->or_where( 'fruits.length', 7 );

产生类似的东西:

SELECT fruits.* FROM fruits WHERE fruits.color = 'red' OR fruits.size = 'medium' OR fruits.name = 'kiwi' OR fruits.length = 7;

我需要强制颜色总是红色。

有没有合适的方法来做到这一点?

【问题讨论】:

    标签: php activerecord codeigniter


    【解决方案1】:

    使用 CodeIgniter Active Record 无法正确实现这一点。

    唯一不太难看的方法是使用带有 where() 函数的 自定义字符串,如下所示:

    $this->db->select( 'fruits.*' );
    $this->db->from( 'fruits' );
    $where = "fruits.color = 'red' AND ( fruits.size = 'medium' OR fruits.name = 'kiwi' OR fruits.length = 7 );";
    $this->db->where( $where );
    

    重要提示:请注意,使用自定义字符串,您的变量不会被转义,因此,您需要使用 $this->db->e​​scape()

    $this->db->select( 'fruits.*' );
    $this->db->from( 'fruits' );
    
    $color = 'red';
    $size = 'medium';
    $name = 'kiwi';
    $length = 7;
    $where = "fruits.color = '".$this->db->escape($color)."' AND ( fruits.size = '".$this->db->escape($size)."' OR fruits.name = '".$this->db->escape($name)."' OR fruits.length = '".$this->db->escape($length)."');";
    $this->db->where( $where );
    

    编辑:

    我对好的查询感到困惑,我更正了它:)

    【讨论】:

    • 是的,这就是我的想法。不幸的是,我的实际查询有一堆 or_where_in 而不仅仅是 or_where.... 所以如果我构建一个自定义 where 字符串,我还不如在那时用原始 SQL 编写整个查询:/ 感谢您的输入。
    • 这是 CodeIgniter 的缺点之一,尤其是现在我使用纯 OOP 的 Yii,我更加注意到它。否则,一个解决方案是创建自己的函数来处理这个问题,或者覆盖 db 类。
    猜你喜欢
    • 2019-02-08
    • 1970-01-01
    • 2016-03-15
    • 2012-04-17
    • 2013-02-22
    • 1970-01-01
    • 2014-06-26
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多