hasOne と hasMany は、複数テーブル関連付けクエリ用の Yii2 独自の関数です。複数テーブル関連付けクエリを使用する場合は、これらを使用することをお勧めします。この記事では主に 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 テーブルの model
) に次のコードを追加します。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() を使用して取得することです。 りー
以上がYii2 での hasOne、hasMany、および多対多関連クエリの使用例 (写真)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。