Yii2 のテーブル間の関連付けには 2 種類あり、2 つのモデル間の関連付けを指定するために使用されます。
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 サイトの他の関連記事を参照してください。