Yii2中的表格之間的關聯有2種,它們用來指定兩個模型之間的關聯。
一對多:hasMany
一對一:hasOne (建議學習:yii教學)
傳回結果:這兩個方法的回傳結果都為yii\db\ActiveQuery物件
第一個參數:所關聯的模型的類別名稱。
第二個參數:是一個數組,其中鍵為所關聯的模型中的屬性,值為目前模型中的屬性。
關聯的使用
現在我們取得一個客戶的所有的訂單資訊
$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;
以上是yii2 hasone怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!