我尝试搜索我的users
表以确定字段token
是否为NULL(表示用户是否已激活,已确认)。
我正在使用CakePHP 1.3,并且在PHP编码方面遇到了一些问题。
$this->paginate = array(
'User' => array(
'conditions' => array(
'User.token LIKE' =>
'IS'.($this->data['User']['activated'] == 'yes' ? '' : 'NOT') . ' NULL'
)
)
);
答案 0 :(得分:0)
我不熟悉cakephp语法。但'NULL'
不是NULL
或""
值。它是一个字符串。
尝试使用''
代替
答案 1 :(得分:0)
我建议扩展条件代码,因为它很难阅读。或者只是稍微改编一下。
目前,您最终会使用User.token LIKE IS NULL
或User.token LIKE NULL
,而且这两种方法都不适用于常规SQL。 CakePHP非常聪明,能够识别空值的相等或不等式,因此您可以执行以下操作:
$this->paginate = array(
'User' => array(
'conditions' => array(
'User.token ' .
$this->data['User']['activated'] == 'yes' ? '' : '!='
=> NULL
)
));
基本上,这决定了要使用的运算符,具体取决于User.activated。值为yes会导致与null相等,否则与null相等,而CakePHP将正确生成User.token IS NULL
或User.token IS NOT NULL
。
答案 2 :(得分:0)
问题中的语法非常混乱 - 这是一个类似的条件,但你不想要一个类似的条件。问题中的代码将构建一个有效匹配字符串“IS NULL”的查询,如下所示:
WHERE `User`.`token` LIKE "IS NULL"
要搜索空值 - 使用null构建条件:
$this->paginate = array(
'User' => array(
'conditions' => array(
'User.token' => NULL
)
)
);
这将生成一个包含条件的查询:
WHERE `User`.`token` IS NULL