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;
當(dāng)獲取未定義的類屬性時會觸發(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ù),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
Windows 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)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
Yii2框架操作數(shù)據(jù)庫的方法分析【以mysql為例】
這篇文章主要介紹了Yii2框架操作數(shù)據(jù)庫的方法,結(jié)合實例形式分析了Yii2框架配置、連接mysql數(shù)據(jù)庫及執(zhí)行SQL進行增刪改查等相關(guān)操作技巧,需要的朋友可以參考下2019-05-05
php代碼把全角數(shù)字轉(zhuǎn)為半角數(shù)字
這篇文章介紹了php代碼把全角數(shù)字轉(zhuǎn)為半角數(shù)字的方法,涉及php針對數(shù)組的遍歷、計算、輸出等簡單操作技巧,需要的朋友可以參考一下2007-12-12

