CakePHP 3.x:用于排除字段可以为NULL或空的记录的查询(';';)
我正在使用cakephp3并试图从字段为非空的表中获取一些行/记录 例如:- 我有一个CakePHP 3.x:用于排除字段可以为NULL或空的记录的查询(';';),php,sql,sql-server-2008,cakephp,cakephp-3.0,Php,Sql,Sql Server 2008,Cakephp,Cakephp 3.0,我正在使用cakephp3并试图从字段为非空的表中获取一些行/记录 例如:- 我有一个areas表,表中有一个名为Area\u block的字段。我需要为那些在区域块中有内容的行获取记录。简单地说,我不需要空的或空的Area\u block行 默认情况下,区域块不是空字段。因此它仍然是空的 我试过了 $conditions = ['Area_Block IS NOT NULL']; $conditions = ['NOT' => array('Area_Block' => '')];
areas
表,表中有一个名为Area\u block
的字段。我需要为那些在区域块
中有内容的行获取记录。简单地说,我不需要空的或空的Area\u block
行
默认情况下,区域块
不是空字段。因此它仍然是空的
我试过了
$conditions = ['Area_Block IS NOT NULL'];
$conditions = ['NOT' => array('Area_Block' => '')];
$conditions = ['Area_Block <>' => ''];
$conditions = ['Area_Block !=' => ''];
$conditions=['Area_Block NOT NULL'];
$conditions=['NOT'=>数组('Area_Block'=>'');
$conditions=['Area_Block'=>'';
$conditions=['Area_Block!='=>'];
但是什么都不管用
我的环境包括MSSQL server 2008和apache上的PHP5.6
请帮忙 我知道您的表包含
区域块
同时设置为NULL
和'
(空字符串)的记录
请尝试以下操作:
$conditions = [['Area_Block IS NOT' => null], ['Area_Block IS NOT' => '']];
这也应该起作用:
$conditions = ['Area_Block IS NOT' => [null,'']]; //haven't tested it
但是,为了降低复杂性,在数据库中,您可能希望将区域块
字段设置为默认为NULL
,或默认为'
,并防止该字段接受NULL
值
只处理非空值
可能更容易。如果更改表格以反映这一点,则只需检查'
值:
$conditions = ['Area_Block IS NOT' => ''];
请参阅3.x食谱。我认为@InigoFlores提供的解决方案在一定程度上起到了作用,但在某些记录上失败了 以下是我为使它完美工作所做的
$conditions=['DATALENGTH(Area_Block)>'=>0]代码>
我希望它能帮助别人。谢谢@Inigo。它工作得完美无缺。为什么我写了“Area\u Block NOT NULL”
。我本该多试试的不用担心:)使用NOTNULL一直都很棘手,CakePHPI会认为$conditions=['Area\u Block不是'=>NULL',Area\u Block!='='=>''代码>将是一种方式。应该适用于所有记录,与MySQL兼容,并且可能比DATALENGTH
选项更快?@GregSchmidt-CakePHP会自动将不是替换为=代码>,使其与数据库无关。其他数据库可能需要
。请看@InigoFlores,我必须检查一些MySQL和MS-SQL应用程序中的各种排列(我不使用任何其他数据库)。我不喜欢”字段不是“=>”
,因为当我读它的时候,它在我的大脑中没有很好的映射;对于值为空的情况,我更愿意将保留为NOT
。我以为蛋糕会取代=
根据需要使用特定于数据库的内容,但我没有任何事实依据。我注意到我没有正确阅读您的问题,特别是您提到字段默认为“”(我假设它是一个字符串)。不幸的是,您提供的解决方案与MySQL不兼容。此外,我对您的问题标题提出的编辑建议可能不合适。我将尝试修复问题标题和答案。谢谢是的,这个问题只针对MSSQL,这就是为什么我到处都提到MSSQL,包括标签。MYSQL可以用于我在问题中提到的任何解决方案,除了第二个。