编码器和在where(array)函数中使用多索引


codeigniter and the use of multi index in where(array) function

当我在codeigniter中使用这个时,它只选择最后一个数组索引

$array = array("status !=" => "deleted", "status !=" => "concept");
$this->db->where($array);

这是结果:

SELECT * FROM (`table`) WHERE `status` != 'concept'

有人知道为什么或知道更好的方法吗?

既然您已经自己弄清楚了这个原因(您只是重写了数组键),那么您应该使用以下选项之一:

你可以在第一个参数中以字符串的形式传递它:

$this->db->where("status != deleted AND status != concept")->get('table');

或者你可以单独调用2个方法:

$this->db->where("status !=", "deleted")
         ->where("status !=", "concept")
         ->get('table');

第一个更简单,但第二个更安全。

你应该这样做,或者你可以试试这个:

$array = array("status !=" => "deleted", "status !=" => "concept");
foreach($array as $k=>$v){
    $this->db->where($k,$v);
}

如果所有子句的列都相同,那么比多个where()更好/更简洁的选择是where_not_in()方法。它就像它说的那样——创建一个NOT IN (..)子句

示例用法:

$this->db->where_not_in('status', $bad_statuses);