Yii2 での hasOne、hasMany、および多対多関連クエリの使用例 (写真)

黄舟
リリース: 2023-03-07 07:42:01
オリジナル
2095 人が閲覧しました

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!