ホームページ バックエンド開発 PHPチュートリアル YII2 で複数テーブルの関連付けを操作する方法の詳細な例

YII2 で複数テーブルの関連付けを操作する方法の詳細な例

Jul 22, 2017 pm 03:02 PM
yii2 どうやって 操作する

最近、仕事で YII2 のマルチテーブル関連付けに関する問題に遭遇しました。この点に関する情報がインターネット上にあまりないことに気づき、自分で整理して、後で参照できるようにしようと思いました。将来必要になる場合や、必要な友人が参照できるようにします。この記事では主に YII2 でのマルチテーブル関連付けの使用方法を紹介します。必要な友人は以下を参照してください。

はじめに

この記事では、YII2.0 のマルチテーブル関連のクエリについて簡単に紹介します。この記事では、コード例を通して詳しく紹介していますので、以下で詳しく説明します:

まず、テーブル構造を説明しましょう

今、次のものがあります。注文テーブル、ユーザーテーブル、商品リストテーブル、商品在庫テーブル

YII では、クエリ用に他のテーブルを直接関連付けたい場合は、最初にモデル内でそれらの関連付けを定義する必要があります

Order

class Order extends \yii\db\ActiveRecord.{
 
 // 关联函数以get+要关联的数据表名来命名
 // 这是获取下订单的客户
 public function getUser(){
  
  // 第一个参数为要关联的子表模型类名,
  // 第二个参数指定 通过子表的user_id,关联主表的usesr_id字段
  // 这里写清楚点大概意思就是User.user_id => Order.user_id
 return $this->hasMany(User::className(), ['user_id' => 'user_id']);
 }
}
ログイン後にコピー

1, hasMany, hasOne use


Yii2 のテーブル間の関連付けには 2 種類あり、2 つのモデル間の関連付けを指定するために使用されます。 H ● 1 対 1: Hasmany ● 1 対 1: Hasone

● 戻り結果: これら 2 つのメソッドの戻り結果は yidbactiveQuery オブジェクトです (標準の配列形式に戻りたい場合は、忘れずに asarray を追加してください) () パラメータ)


●第一パラメータ:関連付けられたモデルのクラス名。


●2 番目のパラメータ: は配列で、キーは関連付けられたモデルの属性、値は現在のモデルの属性です。



関連付けの使用法

それでは、注文を取得してみましょう

//获取订单信息
$order = Order::findOne(1);
//根据订单信息获取到用户信息
$user = $order->user;
ログイン後にコピー

もちろん、より単純に見える with メソッドを使用することも選択できます。with のパラメータは名前です。関係と、モデルで定義された getUser の Just user です。


//返回订单信息(包括用户信息)
$order = Order::find(1)->with('user');
//或者
$order = Order::find(1)->getUser();
ログイン後にコピー

上記のコードは、次の SQL ステートメントを生成して実行します


SELECT * FROM order WHERE id=1;
SELECT * FROM user  WHERE user.user_id=order.user_id;
ログイン後にコピー

上記からわかるように、次の 2 つの方法がありますアソシエーションにアクセス
数 ● 関数で呼び出すと、ActiveQuery オブジェクトが返されます ($ Customer-& GT; GetOrders ()-& GT; All ()) ● 属性で呼び出すと、モデル ($ Customer ->orders)

関連結果キャッシュ

この時点で注文テーブルが変更され、再度クエリを実行したい場合


$user = $order->user;
ログイン後にコピー
注文を再度取得すると、次のことがわかります。変化がないということ。その理由は、$order->user が初めて実行されるときにのみデータベースがクエリされ、その結果がキャッシュされ、後続のクエリでは SQL が実行されないためです。

では、SQL を再度実行したい場合はどうすればよいでしょうか?


//先释放缓存
unset($order->user);
$order->user;
ログイン後にコピー

クロステーブルクエリを実行できます


以下が重要なポイントです!上のテーブル構造図からわかるように、User テーブルと Order_goods は直接関連していないため、ユーザー情報に基づいてユーザーがどの製品を購入したかを知りたい場合は、Order テーブルを通じて 2 つのテーブルを関連付ける必要があります。じゃあ何をすればいいの? 1 つ目はモデル層です。ユーザーに基づいてチェックしているため、ユーザー モデル レイヤーに移動して関連付けを定義します。

User

public function getOrder() {
 return $this->hasMany(Order::className(), ['user_id' => 'user_id']);
}
 
public function getOrderGoods() {
 return $this->hasMany(OrderGoods::className(), ['order_id' => 'order_id'])->
  via('order');
}
ログイン後にコピー

ここで注意してください:

getOrderGoods の 2 番目の order_id は、getOrder に関連付けられた Order の order_id を指し、最初の order_id は OrderGoods の order_id を指します。


でも! SQL ステートメントを使用する最も簡単な方法もあります。

$map = 'select
  user.name,
  order.id,
  order_goods.goods_id,
  goods.goods_name,
  stock.stock_count
  from user
  LEFT JOIN order   ON order.user_id = user.user_id
  LEFT JOIN order_goods ON order_goods.order_id = order.order_id
  LEFT JOIN goods   ON goods.goods_id = order_goods.goods_id
  LEFT JOIN stock   ON stock.goods_id = goods.goods_id';

$list1 = Article::findBySql($map)->asArray()->all();
ログイン後にコピー
これは基本的に関連部分全体です

概要


以上がYII2 で複数テーブルの関連付けを操作する方法の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PyCharm の使用法チュートリアル: 操作の実行方法を詳しく説明します PyCharm の使用法チュートリアル: 操作の実行方法を詳しく説明します Feb 26, 2024 pm 05:51 PM

PyCharm は非常に人気のある Python 統合開発環境 (IDE) であり、Python 開発をより効率的かつ便利にするための豊富な機能とツールを提供します。この記事では、PyCharm の基本的な操作方法を紹介し、読者がすぐに使い始めてツールの操作に習熟できるように、具体的なコード例を示します。 1. PyCharm をダウンロードしてインストールします。 まず、PyCharm 公式 Web サイト (https://www.jetbrains.com/pyc) にアクセスする必要があります。

sudo とは何ですか?なぜ重要ですか? sudo とは何ですか?なぜ重要ですか? Feb 21, 2024 pm 07:01 PM

sudo (スーパーユーザー実行) は、一般ユーザーが root 権限で特定のコマンドを実行できるようにする、Linux および Unix システムの重要なコマンドです。 sudo の機能は主に次の側面に反映されています。 権限制御の提供: sudo は、ユーザーにスーパーユーザー権限を一時的に取得することを許可することで、システム リソースと機密性の高い操作を厳密に制御します。一般のユーザーは、必要な場合にのみ sudo を介して一時的な権限を取得できるため、常にスーパーユーザーとしてログインする必要はありません。セキュリティの向上: sudo を使用すると、日常的な操作中に root アカウントの使用を回避できます。すべての操作に root アカウントを使用すると、誤った操作や不注意な操作には完全な権限が与えられるため、予期しないシステムの損傷につながる可能性があります。そして

Linux Deployの操作手順と注意事項 Linux Deployの操作手順と注意事項 Mar 14, 2024 pm 03:03 PM

LinuxDeploy の操作手順と注意事項 LinuxDeploy は、ユーザーが Android デバイスにさまざまな Linux ディストリビューションを迅速に展開できるようにする強力なツールで、ユーザーはモバイル デバイスで完全な Linux システムを体験できます。この記事では、LinuxDeploy の操作手順と注意事項を詳しく紹介し、読者がこのツールをより効果的に使用できるように、具体的なコード例を示します。操作手順: Linux のインストールDeploy: まず、インストールします

Win10 起動パスワードの F2 キーを押すのを忘れた場合の対処方法 Win10 起動パスワードの F2 キーを押すのを忘れた場合の対処方法 Feb 28, 2024 am 08:31 AM

おそらく多くのユーザーは、自宅に未使用のコンピュータを複数台持っており、長期間使用していなかったためにパワーオン パスワードを完全に忘れてしまったため、パスワードを忘れた場合の対処方法を知りたいと考えています。それでは、一緒に見てみましょう。 win10 起動パスワードの F2 キーを押し忘れた場合の対処方法 1. コンピューターの電源ボタンを押し、コンピューターの電源を入れるときに F2 キーを押します (コンピューターのブランドによって、BIOS に入るボタンが異なります)。 2. BIOS インターフェイスで、セキュリティ オプションを見つけます (コンピューターのブランドによって場所が異なる場合があります)。通常は上部の設定メニューにあります。 3. 次に、「SupervisorPassword」オプションを見つけてクリックします。 4. この時点で、ユーザーは自分のパスワードを確認できると同時に、その横にある [有効] を見つけて [無効] に切り替えることができます。

iPhone 15 Proおよび15 Pro Maxのアクションボタンを無効にする方法 iPhone 15 Proおよび15 Pro Maxのアクションボタンを無効にする方法 Nov 07, 2023 am 11:17 AM

Apple は、iPhone 15 Pro と 15 Pro Max に Pro 専用のハードウェア機能をいくつか導入し、みんなの注目を集めました。チタン フレーム、洗練されたデザイン、新しい A17 Pro チップセット、エキサイティングな 5 倍望遠レンズなどについて話します。 iPhone 15 Proモデルに追加されたすべての付加機能の中で、アクションボタンは依然として際立って目立つ機能です。言うまでもなく、iPhone でアクションを起動するのに便利な機能です。ただし、誤ってアクション ボタンを押したままにして、誤って機能をトリガーしてしまう可能性があります。率直に言って、面倒です。これを回避するには、iPhone 15 Pro および 15 Pro Max のアクションボタンを無効にする必要があります。させて

Huawei Mate60 Proのスクリーンショット操作手順の共有 Huawei Mate60 Proのスクリーンショット操作手順の共有 Mar 23, 2024 am 11:15 AM

スマートフォンの普及に伴い、スクリーンショット機能は携帯電話を日常的に使用する上で必須のスキルの 1 つになりました。 Huaweiの主力携帯電話の1つであるHuawei Mate60Proのスクリーンショット機能は、当然のことながらユーザーの注目を集めています。今日は、誰もがより便利にスクリーンショットを撮れるように、Huawei Mate60Pro携帯電話のスクリーンショットの操作手順を共有します。まず、Huawei Mate60Pro携帯電話はさまざまなスクリーンショット方法を提供しており、個人の習慣に応じて自分に合った方法を選択できます。以下は、一般的に使用されるいくつかのインターセプトの詳細な紹介です。

CSS Web ページのスクロール監視: Web ページのスクロール イベントを監視し、対応する操作を実行します。 CSS Web ページのスクロール監視: Web ページのスクロール イベントを監視し、対応する操作を実行します。 Nov 18, 2023 am 10:35 AM

CSS Web ページのスクロール監視: Web ページのスクロール イベントを監視し、対応する操作を実行します。フロントエンド テクノロジの継続的な開発により、Web ページの効果とインタラクションはますます豊かかつ多様になってきています。その中でも、スクロールモニタリングは、ユーザーがWebページをスクロールするときに、スクロール位置に基づいて何らかの特殊効果や操作を実行できる一般的な技術です。一般に、スクロール監視は JavaScript を通じて実装できます。ただし、場合によっては、純粋な CSS を通じてスクロール監視の効果を実現することもできます。この記事では、CSSを使用してWebページのスクロールを実装する方法を紹介します。

カスタムアクションボタン: iPhone 15 Pro のパーソナライゼーションを探索する カスタムアクションボタン: iPhone 15 Pro のパーソナライゼーションを探索する Sep 24, 2023 pm 03:05 PM

Apple の iPhone 15 Pro および iPhone 15 Pro Max では、音量ボタンの上にある従来の着信音/サイレント スイッチに代わる、新しいプログラム可能なアクション ボタンが導入されています。 [アクション] ボタンの機能とカスタマイズ方法については、以下をお読みください。 Apple iPhone 15 Pro モデルの新しいアクション ボタンは、着信音とサイレントを有効にする従来の iPhone スイッチを置き換えます。デフォルトでは、新しいボタンを長押しすると両方の機能が有効になりますが、長押しすると、カメラやフラッシュライトへのクイック アクセス、ボイスメモの有効化、フォーカス モード、翻訳、その他のさまざまな機能を実行することもできます。拡大鏡などのアクセシビリティ機能。単一のショートカットに関連付けることもでき、他の可能性がたくさん広がります。

See all articles