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


CakePHP 3.x: Query to exclude records in which a field can be either NULL or empty ('')

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

例如:-

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

默认情况下,Area_block不是NULL字段。因此,它保持空/空白

我试过

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

但什么都不管用!!

我的环境包括MSSQL服务器2008和apache上的PHP 5.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 Cookbook中的自动IS NOT NULL创建。

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

以下是我为使它完美工作所做的。

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

我希望它能帮助到别人。