[英]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.