Вид сетки Yii2 Сортировка и фильтрация с использованием пользовательской метки


В моей таблице пользователей у меня есть такие поля, как имя и фамилия. затем я сгенерировал представления с помощью Gii.На моей странице индекса теперь у меня есть Имя, Фамилия, Имя пользователя и т. Д....

Я объединил свое имя и фамилию в качестве Имени.

[
  'attribute'=>'firstname',
  'label' => 'Name',
  'format' => 'raw',
  'value' => function ($data) {
   return Html::a($data->Name);
   },
],     

В модели

public function getName()
{
    return $this->firstname.' '.$this->lastname;
}

К сожалению, я не могу выполнить поиск в поле имя с фамилией... Мне нужно отфильтровать поле как по имени, так и по фамилии.
Может ли кто-нибудь, пожалуйста, помочь мне....
Заранее спасибо.

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