CakePHP:查找字段不为空的位置

Dan*_*ake 46 php cakephp

我需要选择User.site_url不为null的所有行.在常规MySQL查询中执行此操作非常简单,但是如何在CakePHP中完成此操作?

手册提到了以下内容:

array ("not" => array (
        "Post.title" => null
    )
)
Run Code Online (Sandbox Code Playgroud)

我尝试了以下但它仍然返回一切

$this->User->find('all', array('conditions' => array('not' => array('User.site_url'))));
Run Code Online (Sandbox Code Playgroud)

g33*_*z0r 95

我想这就是你的意思:

$this->User->find('all', array( 
    'conditions' => array('not' => array('User.site_url' => null))
));
Run Code Online (Sandbox Code Playgroud)

  • 转换为“ AND NOT(User.site_url = NULL)”。所以我更喜欢@GwynBleidd答案['User.site_url不为空']。 (2认同)

Pet*_*dIt 16

你刚刚错过了null

$this->User->find('all', array('conditions' => array('not' => array('User.site_url'=>null))));
Run Code Online (Sandbox Code Playgroud)


小智 13

在Cake中,WHERE条件是通过连接键和值从'conditions'元素构造的.这意味着如果您愿意,您实际上可以跳过提供密钥.例如:

array('conditions' => array('User.id'=>1))
Run Code Online (Sandbox Code Playgroud)

完全等同于

array('conditions' => array('User.id = 1'))
Run Code Online (Sandbox Code Playgroud)

从本质上讲,您可以通过以下方式解决您的问题:

$this->User->find('all', array('conditions' => array('User.site_url IS NOT NULL')));
Run Code Online (Sandbox Code Playgroud)


Fur*_*ury 5

对于简单查询:

$this->User->find('all', array(
     'conditions' => array(
         'User.site_url IS NOT NULL'
));
Run Code Online (Sandbox Code Playgroud)

对于cakephp 3.X

 $table = TableRegistry::get('Users');
 $assessmentComments = $table
      ->find()
      ->where(function (QueryExpression $exp, Query $q) {
            return $exp->isNotNull('site_url');
        })
      ->all();
Run Code Online (Sandbox Code Playgroud)

  • IS NOT NULL,IS NULL 绝对是正确的选择。 (2认同)