ホームページ  >  記事  >  バックエンド開発  >  Yii2 での hasOne、hasMany、および多対多関連クエリの使用法の詳細な説明

Yii2 での hasOne、hasMany、および多対多関連クエリの使用法の詳細な説明

不言
不言オリジナル
2018-05-08 16:40:062259ブラウズ

この記事では、主に Yii2 の hasOne、hasMany、および多対多関連のクエリの詳細な使用法を紹介します。必要な友人はそれを参照できるようにします。

hasOne と hasMany は、複数テーブル関連のクエリ用の Yii2 独自の関数です。複数テーブル関連のクエリを使用する場合は、これらを使用することをお勧めします。なぜ?この方法で関連するクエリの結果には Yii2 独自のヘッダー ソート機能と、CheckboxColumn の入力の ID 格納値が保持されるため、他にも利点があるかどうかについては、作者がこの 2 つを発見する必要があります。ここまでは共通のメリットです。 yiidbQuery クエリやネイティブ SQL ステートメント クエリなど、他の関連クエリが存在しない場合、クエリがリストに表示されると、テーブルのヘッダーは黒になります。 Yii2 の hasOne、hasMany 複数テーブル関連のクエリは、ドキュメントであろうと記事であろうと、実際には簡単に参照マスターを見つけることができますが、なぜ著者がこの記事を書いたのかというと、そのアイデアは実際には非常に単純です。情報 多対多の関連クエリの使用方法については、私自身や他の人が説明するつもりはありません。知識を増やすために、この記事の焦点は多対多の関連クエリの使用です。

要件分析

1. リスト内のすべてのデータを表示するには、1 対 1、1 対多、および多対多の関係を使用します。 2. Yii2 独自のヘッダーソート関数と CheckboxColumn の入力 ID 値は破棄できません。

レンダリング

1. 1 対 1、1 対多、多対多、ヘッダーの並べ替え。

2. CheckboxColumn の入力の ID 値。

コード分析

多対多例: 1 人の顧客が複数のタグを持つことができ、1 つのタグで複数の顧客をターゲットにすることができます。

1. TSales (customer テーブルのモデル) に次のコードを追加します。

 public function getcommon_tag()
 { 
  return $this->hasMany(CommonTag::className(), ['itemid' => 't_id'])->onCondition(['idtype' => "内容"])->joinWith(['tag']);    
 }

注: ここでの common_tag テーブルは、hasMany を使用して customer テーブルに関連付けられた後の中間テーブルです。 、joinWith(( ['tag']) に関連付けられたタグ テーブル。 onCondition は追加の条件を持つメソッドです。

2. 次のコードを CommonTag (中間テーブル モデル) に追加して、タグ テーブルを関連付けます。hasOne を使用するだけです。

public function gettag()
{ 
 return $this->hasOne(Tag::className(), ['id'=>'tagid']);
}

3. 次のコードを TSalesSearch (顧客の検索モデル) に追加して、common_tag 中間テーブルを関連付けます: $query->joinWith(['common_tag']);

4 ページの出力コードは次のとおりです。以下のように:

[
 'attribute' => 'tag_id',
 'value' => function ($model) { 
  $_tag=$model->getRelatedRecords()['common_tag'];
  if(!empty($_tag)){
   $tagName="";
   foreach ($_tag as $key => $value) {                        $tagName.=$value['tag']['name'].'/';
   }
   return rtrim($tagName,'/');
  } 
 },
],

注: $model->getManyRecords() は [_popular:yiidbBaseActiveRecord:private] 配列の値を取得するために使用されます。

一対多

1. 前の多対多の使用法に含まれる hasMany は 1 対多の使用法に属します。1 対多の使用法を実装したい場合は、次の joinWith を削除するだけです。その他の設定と出力方法は同様です。

One-to-One

1. hasOne は 1 対 1 の使用法についても説明しました。構成は hasMany と同じです。詳細はこちら。

注意事項

1. 次のコード出力 (common_tag.name) を使用して関連クエリからの値を取得できない場合は、名前フィールドが顧客テーブルに存在し、この値が存在する必要があります。が空の場合、名前が繰り返される場合、メイン テーブルのフィールドが最初に出力されます。 $model->getManyRecords() を使用して取得します。

 [
 'attribute' => 'tag_id',
 'value' => 'common_tag.name'
 ]

関連する推奨事項:

複数フィールドの同時検索を実装するための Yii2 メソッド


以上がYii2 での hasOne、hasMany、および多対多関連クエリの使用法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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