Вид сетки Yii2 Сортировка и фильтрация с использованием пользовательской метки
В моей таблице пользователей у меня есть такие поля, как имя и фамилия. затем я сгенерировал представления с помощью Gii.На моей странице индекса теперь у меня есть Имя, Фамилия, Имя пользователя и т. Д....
Я объединил свое имя и фамилию в качестве Имени.
[
'attribute'=>'firstname',
'label' => 'Name',
'format' => 'raw',
'value' => function ($data) {
return Html::a($data->Name);
},
],
В модели
public function getName()
{
return $this->firstname.' '.$this->lastname;
}
К сожалению, я не могу выполнить поиск в поле имя с фамилией...
Мне нужно отфильтровать поле как по имени, так и по фамилии.
Может ли кто-нибудь, пожалуйста, помочь мне....
Заранее спасибо.
2
Author: Mohammed Iqbal Khan, 2017-01-17
1 answers
Вот как вы настраиваете модель поиска (я не включил другие ваши столбцы, так что не забывайте об этом)
Вы можете найти больше здесь: http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/
class UserSearch extends User
{
public $name;
public function rules()
{
return [
[['name'], 'safe'],
// some other rules ...
];
}
public function scenarios()
{
// bypass scenarios() implementation in the parent class
return Model::scenarios();
}
public function search($params)
{
$query = User::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$dataProvider->sort->attributes['name'] = [
'asc' => ['lastname' => SORT_ASC, 'firstname' => SORT_ASC],
'desc' => ['lastname' => SORT_DESC, 'firstname' => SORT_DESC],
'label' => 'Name',
'default' => SORT_ASC
];
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
// grid filtering conditions
// some other filters ...
$query->andFilterWhere([
'or',
['like', 'lastname', $this->name],
['like', 'firstname', $this->name],
]);
return $dataProvider;
}
}
И в вашем представлении сетки вместо
[
'attribute'=>'firstname',
// ...
],
Просто используйте
[
'attribute'=>'name',
],
1
Author: Ripper, 2017-01-17 07:18:57