2014-09-20 49 views
31

什麼是警予1.x中加入IN條件到活動查詢 你可以使用CDbCriteria這樣Yii2:活動記錄添加未在條件

$cr = new CDbCriteria(); 
$cr->addNotInCondition('attribute', $array); 

的活動記錄的方式似乎有不等價yii2活動記錄實現中的API調用,如何通過活動記錄執行此操作?

+0

此[鏈接](http://stackoverflow.com/questions/ 31041546/how-to-use-not-equal-to-inside-a-yii2-query/32860991#32860991)可以幫助某人。 – 2016-04-07 12:32:43

回答

64

那麼所有的查詢操作數似乎內yii\db\QueryInterface::Where()現合併每個文檔 的狀況現在可以使用的東西被添加像

$query = MyModel::find()->where(['attribute'=>$array]); 

的不是條件是稍有不同的格式

$query = MyModel::find()->where(['not in','attribute',$array]); 
+1

這會失敗,我們需要:$ query = MyModel :: find() - > where(['attribute'=> $ array]) - > all(); – Billy 2015-12-07 20:07:22

+0

這將是一個條件,問題是關於不參考這裏的細節:http://www.yiiframework.com/doc-2.0/yii-db-query.html#where()-detail – Manquer 2015-12-07 20:19:16

2

對於數字:

$query = MyModel::find()->where('NOT IN('.implode(',', $array).')'); 

對於字符串

$deleteContracts = Contract::find() 
    ->where([ 
     'session_id' => $session_id, 
     'status' => Contract::STATUS_COMPLETED 
    ]) 
    ->andWhere(['not in', 'contract_id', $contracts]) 
    ->all(); 
0

對我來說,唯一的工作解決辦法是:

$query = MyModel::find()->where('`your-attribute` NOT IN(' . implode(',', $array) . ')')->all();