Yii2如何重置默认作用域?特定查询如何跳过默认作用域?
解决方法:跳过默认作用域查询所有记录
在报表模块需要查询已删除记录时,只需在查询链里调用unscoped()方法就能跳过默认作用域,这样就能获取包括已删除(is_deleted = 1)在内的所有记录啦。
给你两个实用的写法:
- 完全跳过所有默认作用域,查询全量记录
// 报表模块中获取所有数据(包含已删除的) $allRecords = YourModel::find()->unscoped()->all();
- 仅覆盖
is_deleted条件,保留其他默认作用域(如果有的话)
如果你的模型默认作用域还有其他过滤规则,不想全部跳过,直接重新设置where条件更精准:
// 只获取已删除的记录,不影响其他默认作用域 $deletedRecords = YourModel::find()->where(['is_deleted' => 1])->all();
简单说下逻辑:
unscoped()会清除所有默认作用域,让你执行一个不受原有过滤限制的“纯净”查询;- 要是只想调整
is_deleted这一个条件,直接覆盖where会更稳妥,不会打乱其他默认的查询规则。
内容的提问来源于stack exchange,提问作者Paritosh Mahale
相关产品推荐
相关产品推荐

