yii2 hasone怎么用

YII2中的表之間的關聯有2種,它們用來指定兩個模型之間的關聯。

yii2 hasone怎么用

一對多:hasMany

一對一:hasOne ? ? ?(推薦學習:yii教程

返回結果:這兩個方法的返回結果都為yiidbActiveQuery對象

第一個參數:所關聯的模型的類名稱。

第二個參數:是一個數組,其中鍵為所關聯的模型中的屬性,值為當前模型中的屬性。

關聯的使用

現在我們獲取一個客戶的所有的訂單信息

$customer?=?Customer::findOne(1);?? $orders?=?$customer->orders;?//?通過在Customer中定義的關聯方法(getOrders())來獲取這個客戶的所有的訂單。

上面的兩行代碼會生成如下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;

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享