User.site_urlがnullではないすべての行を選択する必要があります。通常の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))
));
あなただけのnullが欠けています
$this->User->find('all', array('conditions' => array('not' => array('User.site_url'=>null))));
Cakeでは、キーと値を結合することにより、 'conditions'要素からWHERE条件が構築されます。これは、必要に応じて実際にキーの提供をスキップできることを意味します。例えば。:
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 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->User->find('all', array('conditions' => array('User.site_url !=' => null));
してみてください ''
ではなくnull
:
$this->User->find('all', array('conditions' => array('User.site_url <>' => ''));
それは私のために働いています
$this->set('inventory_masters',$this->InventoryMaster->find('all',array('order'=>$orderfinal,'conditions' => array('InventoryMaster.id' => $checkboxid,'not' => array('InventoryMaster.error'=>null)))));