2014-09-20 6 views
31

Was die Zugabe von IN-Bedingung zu einer aktiven Abfrage die aktiven Datensatz Art und Weise ist in yii 1.x Sie CDbCriteria wie dieseYii2: Active Record In Zustand fügen Sie nicht

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

nutzen könnten Es scheint keine äquivalent zu sein API-Aufruf in yii2 active record implementation, wie geht das über active record?

+0

diese [link] (http://stackoverflow.com/questions/ 31041546/how-to-use-nicht-gleich-zu-inside-a-yii2-query/32860991 # 32860991) kann jemandem helfen. –

Antwort

64

Nun alle Query-Operanden scheint innerhalb jetzt verschmolzen können nun in yii\db\QueryInterface::Where() pro Dokumentation ein In Zustand ein nicht etwas anderes Format

Im Zustand etwas wie

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

für die Verwendung hinzugefügt werden ist

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

Dies wird fehlschlagen, wir brauchen: $ query = MyModel :: find() -> wo (['attribute' => $ array]) -> all(); – Billy

+0

das wäre für eine in bedingung, die frage ist hier nicht für details zu verweisen: http://www.yiiframework.com/doc-2.0/yii-db-query.html#where()-detail – Manquer

2

Für Zahlen:

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

Für Streicher

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

Für mich ist die einzige funktionierende Lösung war:

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