yii - 从 ActiveQuery->init() 覆盖条件

标签 yii yii2

在 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/

相关文章:

javascript - 如何在页面刷新/加载时刷新验证码图像?

yii - 在同一个项目中使用 Yii1 和 Yii2

php - 如何创建 yii2 内联复选框列表

php - 使用 yii2 的 gridview 和普通数据数组

javascript - Yii2 kartik DatePicker 如何选择点击日期的整周

php - Yii:如何在 View 中格式化日期时间并按年份搜索

frameworks - yii 中其他模型字段的必填字段

database - 在 relations() 方法中定义自定义排序标准

php - 从 SQL select sum group by 到 Yii 框架中的 Active Record 2

php - 在 Yii2 中获取 UploadedFile 实例的问题