ホームページ  >  記事  >  PHPフレームワーク  >  yii2ハゾンの使い方

yii2ハゾンの使い方

(*-*)浩
(*-*)浩オリジナル
2019-11-07 09:57:563934ブラウズ

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

yii2ハゾンの使い方

1 対多: hasMany

1 対 1: hasOne (推奨学習: yii チュートリアル)

戻り結果: これら 2 つのメソッドの戻り結果は、yii\db\ActiveQuery オブジェクトです。

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

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

関連使用

顧客のすべての注文情報を取得します

$customer = Customer::findOne(1);  
$orders = $customer->orders; // 通过在Customer中定义的关联方法(getOrders())来获取这个客户的所有的订单。

上記の 2 行のコードにより、次の SQL ステートメントが生成されます

SELECT * FROM customer WHERE id=1;  
SELECT * FROM order WHERE customer_id=1;

関連付け結果のキャッシュ

顧客の注文が変更された場合は、再度呼び出します

$orders = $customer->orders;

注文を再度受け取ると、次のことがわかります。は変わりません。その理由は、$customer->orders が初めて実行されるときにのみデータベースがクエリされ、その結果がキャッシュされ、後続のクエリでは SQL が実行されないためです。

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

unset($customer->orders);  
$customer->orders;

を実行すると、データベースからデータをフェッチできます。

コードの説明:

// 执行sql语句: SELECT * FROM customer WHERE id=1  
$customer = Customer::findOne(1);  
//执行sql:SELECT * FROM order WHERE customer_id=1  
$orders1 = $customer->orders;  
//这个不会执行sql,直接使用上面的缓存结果  
$orders2 = $customer->orders;
//如果中间的用户订单有变化,我们就不能从缓存中获取,要unset掉
unset($customer->orders);  
$orders2 = $customer->orders;

以上がyii2ハゾンの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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