Yii2-GridView 中让关联字段带搜索和排序功能示例

5年以前  |  阅读数:811 次  |  编程语言:PHP 

情境要求:

要在订单(Order)视图的gridview中显示出客户(Customer)姓名,并使其具有与其它字段相同的排序和搜索功能。

数据库结构

订单表order含有字段customer_id 与 客户表customer的id字段关联

首先确保在Order Model中包含以下代码:


    public function getCustomer()
    {
      return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
    }

用gii会自动生成此代码;

第一步:

在OrderSearch添加一个$customer_name变量


    class OrderSearch extends Order
    {
      public $customer_name; //<=====就是加在这里
    }

第二步:

修改OrderSearch中的search函数


    public function search($params)
    {
      $query = Order::find();
      $query->joinWith(['customer']);<=====加入这句
      $dataProvider = new ActiveDataProvider([
        'query' => $query,
      ]);

      $dataProvider->setSort([
        'attributes' => [
          /* 其它字段不要动 */  
          /* 下面这段是加入的 */
          /*=============*/
          'customer_name' => [
            'asc' => ['customer.customer_name' => SORT_ASC],
            'desc' => ['customer.customer_name' => SORT_DESC],
            'label' => 'Customer Name'
          ],
          /*=============*/
        ]
      ]); 

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

      $query->andFilterWhere([
        'id' => $this->id,
        'user_id' => $this->user_id,
        'customer_id' => $this->customer_id,
        'order_time' => $this->order_time,
        'pay_time' => $this->pay_time,
      ]);

      $query->andFilterWhere(['like', 'status', $this->status]);
       $query->andFilterWhere(['like', 'customer.customer_name', $this->customer_name]) ;//<=====加入这句

      return $dataProvider;
    }

第三步:

修改order/index视图的gridview


    <?= GridView::widget([
      'dataProvider' => $dataProvider,
      'filterModel' => $searchModel,
      'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        'id',
        'customer_id', 
        'status',
        ['label'=>'客户', 'attribute' => 'customer_name', 'value' => 'customer.customer_name' ],//<=====加入这句
        ['class' => 'yii\grid\ActionColumn'],
      ],
    ]); ?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例