この記事では、主に 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() を使用して取得します。 関連する推奨事項: 以上がYii2 での hasOne、hasMany、および多対多関連クエリの使用法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
[
'attribute' => 'tag_id',
'value' => 'common_tag.name'
]