如何使用 CodeIgniter 的 ActiveRecord 选择列值为 NOTNULL 的行?

我正在使用 CodeIgniter 的 Active Record 类查询 MySQL 数据库。我需要在一个字段未设置为 NULL 的表中选择行:

$this->db->where('archived !=', 'NULL');
$q = $this->db->get('projects');

只返回此查询的:

SELECT * FROM projects WHERE archived != 'NULL';

archived字段是 DATE字段。

还有更好的解决办法吗?我知道我可以自己编写查询,但是我想在整个代码中始终使用活动记录。

132053 次浏览
where('archived IS NOT NULL', null, false)

不能将 Null 设置为 string..。

$this->db->where('archived IS NOT', null);

当 null 没有包装成引号时,它正常工作。

活动记录肯定有些怪癖。当您向 $this->db->where()函数传递一个数组时,它将生成一个 ISNULL。例如:

$this->db->where(array('archived' => NULL));

生产

WHERE `archived` IS NULL

奇怪的是负 IS NOT NULL没有等价物。然而,有一种方法可以产生正确的结果,但仍然可以逃避陈述:

$this->db->where('archived IS NOT NULL');

生产

WHERE `archived` IS NOT NULL

检查列是否为空的一种方法是

$this->db->where('archived => TRUE);
$q = $this->db->get('projects');

在 php 中,如果 column 有数据,则可以表示为 True,否则表示为 False 在其中使用多重比较命令并检查列数据是否为空 像这样

下面是一个完整的例子,说明如何在 where 子句(Codeignitor)中筛选列。最后一个显示 不是空压缩

$where = array('somebit' => '1', 'status' => 'Published', 'archived ' => TRUE );
$this->db->where($where);

最好使用以下方法:

For 不为空:

where('archived IS NOT NULL', null);

因为它是无效的:

where('archived', null);

为了给您提供另一个选项,您可以使用 NOT ISNULL(archived)作为 WHERE 过滤器。

Codeigniter 生成一个“ IS NULL”查询,只留下没有参数的调用:

$this->db->where('column');

生成的查询是:

WHERE `column` IS NULL

代码点火器3

只有:

$this->db->where('archived IS NOT NULL');

生成的查询是:

WHERE archived IS NOT NULL;

$this-> db-> where (‘ archive IS NOT NULL’,无效假的) ; < < 不必要

相反:

$this->db->where('archived');

生成的查询是:

WHERE archived IS NULL;

$this-> db-> or _ where (‘ end _ date IS’,‘ NULL’,false) ;

您可以这样做(如果您想测试 NULL)

$this->db->where_exec('archived IS NULL)

如果要测试 NOT NULL,则为

$this->db->where_exec('archived IS NOT NULL)

如果你在你的模型中使用 多地方,例如:

function getCommonRecords($id, $tbl_name, $multi_where='') {
$this->db->select('*');
$this->db->where('isDeleted', '0');
if ($id > 0) {
$this->db->where('id', $id);
}
if ($multi_where != '') {
foreach ($multi_where as $key => $val) {
$this->db->where($key, $val);
}
}
$queryResult = $this->db->get($tbl_name);
return $queryResult->result_array();
}

然后,我建议使用以下语法,在计算 multi where 条件时绕过第二个参数。

 $this->api->getCommonRecords(NULL,'contracts', ['id' =>,'party1Sign IS NOT NULL'=>NULL,'party2Sign IS NOT NULL'=>null]);