Ответ 1
Я думаю, это то, что вы имеете в виду:
$this->User->find('all', array(
'conditions' => array('not' => array('User.site_url' => null))
));
Мне нужно выбрать все строки, где User.site_url не является нулевым. Это достаточно просто, чтобы сделать это в обычном MySQL-запросе, но как это делается в CakePHP?
В руководстве упоминается следующее:
array ("not" => array (
"Post.title" => null
)
)
Я пробовал следующее, но он все еще возвращает все
$this->User->find('all', array('conditions' => array('not' => array('User.site_url'))));
Я думаю, это то, что вы имеете в виду:
$this->User->find('all', array(
'conditions' => array('not' => array('User.site_url' => null))
));
У вас просто отсутствует нуль
$this->User->find('all', array('conditions' => array('not' => array('User.site_url'=>null))));
В 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')));
Вы также можете попробовать это,
$this->User->find('all', array('conditions' => array('User.site_url <>' => null));
Это отлично работает для меня.
Эта работа отлично подходит для меня:
$this->User->find('all', array('conditions' => array('User.site_url !=' => null));
Попробуйте ''
вместо null
:
$this->User->find('all', array('conditions' => array('User.site_url <>' => ''));
Для простого запроса:
$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();
эта область правильна! (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();
Работает для меня
$this->set('inventory_masters',$this->InventoryMaster->find('all',array('order'=>$orderfinal,'conditions' => array('InventoryMaster.id' => $checkboxid,'not' => array('InventoryMaster.error'=>null)))));