Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP 3.x:用于排除字段可以为NULL或空的记录的查询(';';)_Php_Sql_Sql Server 2008_Cakephp_Cakephp 3.0 - Fatal编程技术网

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

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' => '')];

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

例如:-

我有一个
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可以用于我在问题中提到的任何解决方案,除了第二个。