Yii2 : Active Record 添加 Not In 条件

Posted

技术标签:

【中文标题】Yii2 : Active Record 添加 Not In 条件【英文标题】:Yii2 : Active Record add Not In condition 【发布时间】:2014-11-15 03:08:03 【问题描述】:

将IN条件添加到活动查询的活动记录方式是什么 在 yii 1.x 中你可以像这样使用 CDbCriteria

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

yii2活动记录实现中似乎没有等效的API调用,如何通过活动记录做到这一点?

【问题讨论】:

这个link 可能对某人有帮助。 【参考方案1】:

对我来说,唯一可行的解​​决方案是:

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

【讨论】:

【参考方案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();

【讨论】:

【参考方案3】:

所有查询操作数现在似乎都合并在yii\db\QueryInterface::Where() 中,每个文档 现在可以使用类似

的方式添加 In 条件
$query = MyModel::find()->where(['attribute'=>$array]);

对于一个不处于状态的它的格式略有不同

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

【讨论】:

这会失败,我们需要: $query = MyModel::find()->where(['attribute'=>$array])->all(); 那将是一个条件,问题是关于不在此处参考详情:yiiframework.com/doc-2.0/yii-db-query.html#where()-detail 查询中的$array 是什么?【参考方案4】:
$query = MyModel::findAll(['not in ','attribute',$array]);

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

【讨论】:

'not in' 中的空白是多余的

以上是关于Yii2 : Active Record 添加 Not In 条件的主要内容,如果未能解决你的问题,请参考以下文章

Yii2之Active Record

Yii2 : Active Record add Not In condition

如何在 Active Record 迁移中为字段添加索引以加快查询速度?

使用 CodeIgniter Active Record 函数将子句添加到不带引号的 MySQL 语句

将记录批量插入 Active Record 表

CodeIgniter 2.0.3 中 Active Record 中奇怪的反引号行为