YII框架關(guān)聯(lián)查詢操作示例
本文實例講述了YII框架關(guān)聯(lián)查詢操作。分享給大家供大家參考,具體如下:
以customer order兩個表為例
關(guān)聯(lián)查詢控制器中
$customer = Customer::find()->where('name'=>'zhangsan')->one(); $orders = $customer->hasmany('orders',['customer_id']=>'id')->asArray()->all(); $orders = $customer->hasmany(Order::className(),['customer_id']=>'id')->asArray()->all();
customer模型中(優(yōu)化)
public function getOrders(){ $orders = $this->hasmany('orders',['customer_id']=>'id')->asArray()->all(); }
關(guān)聯(lián)查詢控制器中就可以這么寫
$customer = Customer::find()->where('name'=>'zhangsan')->one(); $orders = $customer->getOrders();
甚至可以這么寫
$orders = $customer->orders;
當獲取未定義的類屬性時會觸發(fā)類的__get()魔術(shù)方法效果 YII會自動調(diào)用 getOrders()
方法,而且會加上->all()
,所以定義getOrders()
時不能帶上all()
Order模型
public function getCustomer(){ $this->hasOne(Customer::className,['id'=>'customer_id'])->asArray(); }
關(guān)聯(lián)查詢控制器中這么寫
$order = Order::find()->where("id"=>'1')->one(); $customer = $order->customer;
注意點
1.關(guān)聯(lián)查詢會被緩存
所以
$customer = Customer::find()->where('name'=>'zhangsan')->one(); unset($customer->orders);//清掉緩存 $order = $customer->orders;
2.關(guān)聯(lián)查詢的多次查詢
$customers = Customer::find()->all();//select * from customer foreach($customers as $customer){ $order = $customer->orders;//select * from order where customer_id = ... }
以上代碼執(zhí)行了101次sql查詢,可以進行如下優(yōu)化
$customers = Customer::find()->with('orders')->all();//select * from customer foreach($customers as $customer){ $order = $customer->orders();//select * from order where customer_id in (...) }//變成了2次查詢
更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開發(fā)框架總結(jié)》、《smarty模板入門基礎(chǔ)教程》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家基于Yii框架的PHP程序設(shè)計有所幫助。
相關(guān)文章
PHP 計算至少是其他數(shù)字兩倍的最大數(shù)的實現(xiàn)代碼
這篇文章主要介紹了PHP 計算至少是其他數(shù)字兩倍的最大數(shù),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05Windows Apache2.2.11及Php5.2.9-1的安裝與配置方法
很早就想在自己的機子上搭建PHP的開發(fā)環(huán)境,今天難得有這個機會,在網(wǎng)上找了一些教程和程序,實踐了一把,過程是很艱辛的,因為遇到了很多的問題,在這里總結(jié)一下。2009-06-06基于Laravel Auth自定義接口API用戶認證的實現(xiàn)方法
這篇文章主要給大家介紹了基于Laravel Auth自定義接口API用戶認證的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-07-07Yii2框架操作數(shù)據(jù)庫的方法分析【以mysql為例】
這篇文章主要介紹了Yii2框架操作數(shù)據(jù)庫的方法,結(jié)合實例形式分析了Yii2框架配置、連接mysql數(shù)據(jù)庫及執(zhí)行SQL進行增刪改查等相關(guān)操作技巧,需要的朋友可以參考下2019-05-05php代碼把全角數(shù)字轉(zhuǎn)為半角數(shù)字
這篇文章介紹了php代碼把全角數(shù)字轉(zhuǎn)為半角數(shù)字的方法,涉及php針對數(shù)組的遍歷、計算、輸出等簡單操作技巧,需要的朋友可以參考一下2007-12-12