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

yii2ハゾンの使い方

(*-*)浩
リリース: 2019-11-07 09:57:56
オリジナル
4025 人が閲覧しました

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

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