在 Yii2 上,我在 ProjectQuery
中有此代码
class ProjectQuery extends \yii\db\ActiveQuery
{
public function init()
{
$this->andOnCondition(['deleted' => 0]);
parent::init();
}
显然,删除的条件必须始终适用,但也可能存在不正确的情况(例如,用户可以选择查看其已删除的项目)。我怎样才能覆盖这个条件?我是否必须使用与
init()
不同的东西? ?(注意,我想正常地将此条件应用于所有类型的查询,这就是为什么我在
init()
上使用 ProjectQuery
而不是 ProjectSearch
类)
最佳答案
您仍然可以使用 init()
但是要覆盖 0,您应该绑定(bind)一个参数。
public function init()
{
$this->andOnCondition('deleted = :deleted', [':deleted' => 0]);
parent::init();
}
因此,要创建一个仅显示已删除项目的查询,请编写如下内容:
$query = Project::find()->addParams([':deleted' => 1]);
要显示所有已删除和未删除的项目,您可以向
ProjectQuery
添加一个函数。反对相应地修改它。public function includeDeleted() {
$this->orOnCondition(['deleted' => 1]);
return $this;
}
然后编写您的查询,如:
$query = Project::find()->includeDeleted();
关于yii - 从 ActiveQuery->init() 覆盖条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50171489/