YII框架关联查询操作示例
网络编程 2021-07-04 23:24www.168986.cn编程入门
这篇文章主要介绍了YII框架关联查询操作,结合实例形式分析了Yii框架关联查询的实现方法及相关操作注意事项,需要的朋友可以参考下
本文实例讲述了YII框架关联查询操作。分享给大家供大家参考,具体如下
以customer order两个表为例
关联查询控制器中
$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模型中(优化)
public function getOrders(){ $orders = $this->hasmany('orders',['customer_id']=>'id')->asArray()->all(); }
关联查询控制器中就可以这么写
$customer = Customer::find()->where('name'=>'zhangsan')->one(); $orders = $customer->getOrders();
甚至可以这么写
$orders = $customer->orders;
当获取未定义的类属性时会触发类的__get()魔术方法效果 YII会自动调用 getOrders()
方法,而且会加上->all()
,所以定义getOrders()
时不能带上all()
Order模型
public function getCustomer(){ $this->hasOne(Customer::className,['id'=>'customer_id'])->asArray(); }
关联查询控制器中这么写
$order = Order::find()->where("id"=>'1')->one(); $customer = $order->customer;
注意点
1.关联查询会被缓存
所以
$customer = Customer::find()->where('name'=>'zhangsan')->one(); unset($customer->orders);//清掉缓存 $order = $customer->orders;
2.关联查询的多次查询
$customers = Customer::find()->all();//select from customer foreach($customers as $customer){ $order = $customer->orders;//select from order where customer_id = ... }
以上代码执行了101次sql查询,可以进行如下优化
$customers = Customer::find()->with('orders')->all();//select from customer foreach($customers as $customer){ $order = $customer->orders();//select from order where customer_id in (...) }//变成了2次查询
更多关于Yii相关内容感兴趣的读者可查看本站专题《》、《》、《》、《》、《》、《》及《》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
上一篇:YII框架学习笔记之命名空间、操作响应与视图操
下一篇:YII框架页面缓存操作示例
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程