ホームページ  >  記事  >  php教程  >  Yii2 は、関連フィールドが検索機能をサポートできるようにするメソッドを実装します。

Yii2 は、関連フィールドが検索機能をサポートできるようにするメソッドを実装します。

高洛峰
高洛峰オリジナル
2016-12-23 16:42:591120ブラウズ

この記事の例では、Yii2 が関連フィールドの検索機能を実装する方法を説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

ここには 2 つのテーブルがあります。テーブル構造は次のとおりです。 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_status:num )

上の表では、companysCompany.company_nameを使用して会社名を取得できますが、これは検索をサポートしていません。

検索機能をサポートするには、ブランチのインデックス ビューに次のコードを追加する必要があります:

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

次に、SearchBranches.php

ルール メソッドを次のように変更します:

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

検索を変更するメソッド:

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

ページを更新してご覧ください

検索機能をサポートする関連フィールドを実装するその他の Yii2 メソッドについては、PHP 中国語 Web サイトの関連記事に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。