CakePHP: Найти, где поле не равно нулю

Мне нужно выбрать все строки, где User.site_url не является нулевым. Это достаточно просто, чтобы сделать это в обычном MySQL-запросе, но как это делается в CakePHP?

В руководстве упоминается следующее:

array ("not" => array (
        "Post.title" => null
    )
)

Я пробовал следующее, но он все еще возвращает все

$this->User->find('all', array('conditions' => array('not' => array('User.site_url'))));

Ответ 1

Я думаю, это то, что вы имеете в виду:

$this->User->find('all', array( 
    'conditions' => array('not' => array('User.site_url' => null))
));

Ответ 2

У вас просто отсутствует нуль

$this->User->find('all', array('conditions' => array('not' => array('User.site_url'=>null))));

Ответ 3

В Cake условие WHERE строится из элемента "conditions" путем объединения ключей и значений. Это означает, что вы можете пропустить предоставление ключей, если хотите. Например:.

array('conditions' => array('User.id'=>1))

полностью эквивалентна

array('conditions' => array('User.id = 1'))

По существу, вы можете решить свою проблему только этим:

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

Ответ 4

Вы также можете попробовать это,

$this->User->find('all', array('conditions' => array('User.site_url <>' => null));

Это отлично работает для меня.

Ответ 5

Эта работа отлично подходит для меня:

$this->User->find('all', array('conditions' => array('User.site_url !=' => null));

Ответ 6

Попробуйте '' вместо null:

$this->User->find('all', array('conditions' => array('User.site_url <>' => ''));

Ответ 7

Для простого запроса:

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

Для cakephp 3.X

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

Ответ 8

эта область правильна! (Ctlockey)

$this->User->find('all', array('conditions' => array('not' => array('User.site_url' =>null))));

Однако я использовал с разными версиями MySql и MariaDb возвращенные противоречивые результаты. Я считаю, что немного прямой SQL не так уж плохо, чтобы обеспечить целостность возврата.

Поэтому я сделал следующее:

$Obj->find()->where(['field_a IS NULL', 'field_b IS NOT NULL'])->all();

Ответ 9

Работает для меня

$this->set('inventory_masters',$this->InventoryMaster->find('all',array('order'=>$orderfinal,'conditions' => array('InventoryMaster.id' => $checkboxid,'not' => array('InventoryMaster.error'=>null)))));