• 技术文章 >php教程 >PHP开发

    Yii2实现让关联字段支持搜索功能的方法

    高洛峰高洛峰2016-12-23 16:42:59原创515
    本文实例讲述了Yii2实现让关联字段支持搜索功能的方法。分享给大家供大家参考,具体如下:

    这里有两张表,表结构如下,companies_compay_id 为外键

    yii2advanced.branches表:

    branch_id:int(11)
    companies_company_id:int(11)
    branch_name:varchar(100)
    branch_address:varchar(255)
    branch_created_date:datetime
    branch_status:enum('active','inactive')

    yii2advanced.companies表:

    company_id:int(11)
    company_name:varchar(100)
    company_email:varchar(100)
    company_address:varchar(255)
    logo:varchar(200)
    company_start_date:datetime
    company_create_date:datetime
    company_status:enum('active','inactive')

    在上面表中,可以用companiesCompany.company_name来获取公司名,不过这样是不支持搜索的。

    想要支持搜索功能,需要在branches的index视图添加以下代码:

    <?= GridView::widget([
      'dataProvider' => $dataProvider,
      'filterModel' => $searchModel,
      'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        //添加的代码开始
        [
          'label'=>'公司名',
          'attribute'=>'companies_company_id',
          'value'=>'companiesCompany.company_name'
        ],
         //添加的代码结束
        'companiesCompany.company_name',
        // 'branch_id',
        // 'companies_company_id',
        'branch_name',
        'branch_address',
        'branch_created_date',
        // 'branch_status',
        ['class' => 'yii\grid\ActionColumn'],
      ],
    ]); ?>

    然后修改SearchBranches.php

    修改rules方法为:

    public function rules()
    {
      return [
        [['branch_id'], 'integer'],
        [['branch_name', 'branch_address', 'branch_created_date', 'branch_status','companies_company_id'], 'safe'],
      ];
    }

    修改search方法:

    public function search($params)
    {
      $query = Branches::find();
      $dataProvider = new ActiveDataProvider([
        'query' => $query,
      ]);
      $this->load($params);
      if (!$this->validate()) {
        // uncomment the following line if you do not want to any records when validation fails
        // $query->where('0=1');
        return $dataProvider;
      }
      // 添加下面这行代码
      $query->joinWith('companiesCompany');
      $query->andFilterWhere([
        'branch_id' => $this->branch_id,
      //  'companies_company_id' => $this->companies_company_id,
        'branch_created_date' => $this->branch_created_date,
      ]);
      $query->andFilterWhere(['like', 'branch_name', $this->branch_name])
        ->andFilterWhere(['like', 'branch_address', $this->branch_address])
        ->andFilterWhere(['like', 'branch_status', $this->branch_status])
         // 添加下面这行代码
        ->andFilterWhere(['like', 'companies.company_name', $this->companies_company_id]);
      return $dataProvider;

    刷新页面即可看到

    更多Yii2实现让关联字段支持搜索功能的方法相关文章请关注PHP中文网!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:Yii2中关联查询简单用法示例 下一篇:Yii2的XSS攻击防范策略分析
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• linux awk命令详解• Symfony2实现从数据库获取数据的方法小结• Yii快速入门 (二)• Zend Framework教程之Zend_Db_Table用法详解• Zend Framework教程之Application用法实例详解
    1/1

    PHP中文网