Yii2网格视图使用自定义标签进行排序和过滤

时间:2017-01-17 06:07:44

标签: php yii grid

在我的用户表中,我有firstname和lastname等字段。 然后我使用Gii生成了一个视图。在我的索引页面中,我现在有姓名,姓氏,用户名等....

我将我的名字和姓氏连接起来作为姓名。

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

模型

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

很遗憾,我无法使用姓氏搜索姓名字段... 我需要用firstname和lastname来过滤字段 任何人都可以帮助我.... 提前谢谢。

1 个答案:

答案 0 :(得分:1)

这是你设置搜索模型的方式(我没有包含你的其他列,所以不要忘记那些)

您可以在此处找到更多信息: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;
    }
}

在你的gridview而不是

[
  'attribute'=>'firstname',
  // ...
],   

只需使用

[
  'attribute'=>'name',
],