入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

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

创建时间:2015-06-08 投稿人: 浏览次数:752

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" => "yiigridSerialColumn"],
  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" => "yiigridActionColumn"],
  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;

刷新页面即可看到

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。