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
関連付けの使用法
それでは、注文を取得してみましょう
//获取订单信息 $order = Order::findOne(1); //根据订单信息获取到用户信息 $user = $order->user;
//返回订单信息(包括用户信息) $order = Order::find(1)->with('user'); //或者 $order = Order::find(1)->getUser();
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;
//先释放缓存 unset($order->user); $order->user;
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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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