CakePHP 3.x:查询以排除字段可以为NULL或为空('')的记录

时间:2015-12-10 11:10:44

标签: php sql sql-server-2008 cakephp cakephp-3.0

我正在使用 Cakephp 3 并尝试从字段为非空的表中获取一些行/记录。

例如: -

我有一个areas表,其中包含一个名为Area_block的字段。我需要获取那些在Area_block内有内容的行的记录。简单来说,我不需要空行或Area_block行。

默认情况下,

Area_block不是NULL字段。所以它仍然是空/空白

我试过了

$conditions = ['Area_Block IS NOT NULL'];
$conditions = ['NOT' => array('Area_Block' => '')];
$conditions = ['Area_Block <>' => ''];
$conditions = ['Area_Block !=' => ''];

但没有任何作用!!

我的环境包括apache上的MSSQL server 2008和PHP 5.6。

请帮助!!

2 个答案:

答案 0 :(得分:6)

我了解您的表格包含Area_Block设置为NULL''(空字符串)的记录。

尝试以下方法:

$conditions = [['Area_Block IS NOT' => null], ['Area_Block IS NOT' => '']];

这也应该有效:

$conditions = ['Area_Block IS NOT' => [null,'']]; //haven't tested it

但是,为了降低复杂性,您可能希望在数据库中将Area_Block字段设置为默认为NULL,或默认为''并阻止字段接受NULL值。

专门使用NOT NULL值可能会更容易。如果您更改表格以反映这一点,则只需要检查''值:

$conditions = ['Area_Block IS NOT' => ''];

请参阅3.x食谱中的Automatic IS NOT NULL Creation

答案 1 :(得分:0)

我认为@InigoFlores提供的解决方案在某种程度上起了作用,但是对某些记录失败了。

这就是我为使其完美运作所做的一切。

$conditions = ['DATALENGTH(Area_Block) >' => 0];

我希望它有所帮助。