0

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

3 回答 3

0

我建议扩展该条件代码,因为它很难阅读。或者只是安排它有点不同。

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

于 2013-05-11T03:12:14.897 回答
0

IS NULL 不是“LIKE 'IS 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
于 2013-05-13T08:28:51.083 回答
0

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

尝试''改用

于 2013-05-09T20:39:05.820 回答