Yii2让关联字段支持搜索功能

来源:互联网 发布:深入浅出数据分析图书 编辑:程序博客网 时间:2024/04/29 06:21

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视图添加以下代码

  1. <?= GridView::widget([
  2. 'dataProvider' => $dataProvider,
  3. 'filterModel' => $searchModel,
  4. 'columns' => [
  5. ['class' => 'yii\grid\SerialColumn'],
  6. //添加的代码开始
  7. [
  8. 'label'=>'公司名',
  9. 'attribute'=>'companies_company_id',
  10. 'value'=>'companiesCompany.company_name'
  11. ],
  12. //添加的代码结束
  13. 'companiesCompany.company_name',
  14. // 'branch_id',
  15. // 'companies_company_id',
  16. 'branch_name',
  17. 'branch_address',
  18. 'branch_created_date',
  19. // 'branch_status',
  20.  
  21. ['class' => 'yii\grid\ActionColumn'],
  22. ],
  23. ]); ?>

然后修改SearchBranches.php

修改rules方法为

  1. public function rules()
  2. {
  3. return [
  4. [['branch_id'], 'integer'],
  5. [['branch_name', 'branch_address', 'branch_created_date', 'branch_status','companies_company_id'], 'safe'],
  6. ];
  7. }

修改search方法

  1. public function search($params)
  2. {
  3. $query = Branches::find();
  4.  
  5. $dataProvider = new ActiveDataProvider([
  6. 'query' => $query,
  7. ]);
  8.  
  9. $this->load($params);
  10.  
  11. if (!$this->validate()) {
  12. // uncomment the following line if you do not want to any records when validation fails
  13. // $query->where('0=1');
  14. return $dataProvider;
  15. }
  16. // 添加下面这行代码
  17. $query->joinWith('companiesCompany');
  18. $query->andFilterWhere([
  19. 'branch_id' => $this->branch_id,
  20. // 'companies_company_id' => $this->companies_company_id,
  21. 'branch_created_date' => $this->branch_created_date,
  22. ]);
  23.  
  24. $query->andFilterWhere(['like', 'branch_name', $this->branch_name])
  25. ->andFilterWhere(['like', 'branch_address', $this->branch_address])
  26. ->andFilterWhere(['like', 'branch_status', $this->branch_status])
  27. // 添加下面这行代码
  28. ->andFilterWhere(['like', 'companies.company_name', $this->companies_company_id]);
  29.  
  30. return $dataProvider;

刷新页面即可看到

0 0
原创粉丝点击