Yii2實(shí)現(xiàn)讓關(guān)聯(lián)字段支持搜索功能的方法

字號(hào):


    本文實(shí)例講述了Yii2實(shí)現(xiàn)讓關(guān)聯(lián)字段支持搜索功能的方法。分享給大家供大家參考,具體如下:
    這里有兩張表,表結(jié)構(gòu)如下,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'
        ],
         //添加的代碼結(jié)束
        '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;
    刷新頁面即可看到。
    希望本文所述對(duì)大家基于Yii框架的PHP程序設(shè)計(jì)有所幫助。