簡體   English   中英

Yii2:如何在 DataFilter 中使用一個過濾器屬性來過濾多個屬性

[英]Yii2: How to filter multiple attributes using one filter attribute in DataFilter

需要有關僅使用一個過濾器屬性來過濾多個屬性的幫助。

     $filter = new ActiveDataFilter([
            'searchModel' => static::class,
            'attributeMap' => [
                'detail' => '{{classification}}.[[name]]',
                'detail' => '{{subclass}}.[[name]]',
                'detail' => ...,
            ],
        ]);

在執行$filter->build()之后,過濾條件只為{{subclass}}.[[name]]屬性的最后一個屬性構建過濾器。

因此,我沒有使用 ActiveDataFilter,而是將搜索過程更改為與普通搜索相同

    public $detail;
    public $classification;
    public $subclass;

    public function rules()
    {
        return [
            [['object_code', 'detail', 'classification', 'subclass'], 'string'],
        ];
    }

    public function search($params)
    {
        $query = $this->model::find();
        $query->joinWith([
            'classification as classification',
            'subclass as subclass',
            'group as group',
            'subgroup as subgroup',
        ]);

        $dataProvider =  new ActiveDataProvider([
            'query' => $query,
        ]);

        $this->load($params, '');

        if (!$this->validate()) {
            return $dataProvider;
        }

        $query
            ->andFilterWhere(['like', 'classification.name', $this->classification])
            ->andFilterWhere(['like', 'subclass.name', $this->subclass])
            ->andFilterWhere([
                'or',
                ['like', 'classification.name', $this->detail],
                ['like', 'subclass.name', $this->detail],
                ['like', 'group.name', $this->detail],
                ['like', 'subgroup.name', $this->detail],
                ['like', 'subobject_details', $this->detail],
                ['like', 'object_details', $this->detail],
            ]);

        return $dataProvider;
    }

我認為這不是我最初問題的好答案,但想將其作為替代解決方案發布。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM