web-dev-qa-db-fra.com

Yii2: Enregistrement actif, ajout non en condition

Quel est le moyen actif d’ajouter d’ajouter une condition IN à une requête active dans yii 1.x vous pourriez utiliser CDbCriteria comme ceci

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

Il semble n'y avoir aucun appel d'API équivalent dans l'implémentation d'un enregistrement actif yii2, comment procéder via l'enregistrement actif?

35
Manquer

Tous les opérandes de requête semblent maintenant fusionnés dans yii\db\QueryInterface::Where() par documentation. Une condition In peut maintenant être ajoutée à l'aide de quelque chose comme:

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

pour un pas En condition que ce soit un format légèrement différent

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

http://www.yiiframework.com/doc-2.0/guide-db-active-record.html

5
Oleg Ozimok

Pour les chiffres:

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

Pour les cordes

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

Pour moi, la seule solution de travail était:

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