在表中搜索空值

时间:2013-05-09 19:55:22

标签: php cakephp cakephp-1.3

我尝试搜索我的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'
        )
    )
);

3 个答案:

答案 0 :(得分:0)

我不熟悉cakephp语法。但'NULL'不是NULL""值。它是一个字符串。

尝试使用''代替

答案 1 :(得分:0)

我建议扩展条件代码,因为它很难阅读。或者只是稍微改编一下。

目前,您最终会使用User.token LIKE IS NULLUser.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 NULLUser.token IS NOT NULL

答案 2 :(得分:0)

IS NULL不是“LIKE'是NULL'”

问题中的语法非常混乱 - 这是一个类似的条件,但你不想要一个类似的条件。问题中的代码将构建一个有效匹配字符串“IS NULL”的查询,如下所示:

WHERE `User`.`token` LIKE "IS NULL"

要搜索空值 - 使用null构建条件:

$this->paginate = array(
    'User' => array(
        'conditions' => array(
            'User.token' => NULL
        )
    )
);

这将生成一个包含条件的查询:

WHERE `User`.`token` IS NULL