介绍
这篇文章给大家介绍怎么在YII框架中实现关联查询,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
<强>关联查询控制器中强>
customer 美元;=,顾客::发现()→地方(& # 39;名字# 39;=祝辞& # 39;zhangsan& # 39;)→(); 美元$ orders =,客户→hasmany(& # 39;订单# 39;[& # 39;customer_id # 39;]=祝辞& # 39;id # 39;)→asArray ()→(); orders 美元;=,美元客户→hasmany(顺序::类名(),(& # 39;customer_id # 39;]=祝辞& # 39;id # 39;)→asArray ()→();
<强>客户模型中(优化)强>
public function getOrders () { orders 美元;=,$ this→hasmany(& # 39;订单# 39;[& # 39;customer_id # 39;]=祝辞& # 39;id # 39;)→asArray ()→(); }
<>强关联查询控制器中就可以这么写强>
customer 美元;=,顾客::发现()→地方(& # 39;名字# 39;=祝辞& # 39;zhangsan& # 39;)→(); orders 美元;=,美元客户→getOrders ();
<强>甚至可以这么写强>
orders 美元;=,美元客户→命令;
当获取未定义的类属性时会触发类的__get()魔术方法效果YII会自动调用<代码> getOrders() 代码>方法,而且会加上<代码>→所有()> 代码,所以定义<代码> getOrders()> 代码时不能带上所有()<代码> 代码>
<强>订单模型强>
public function getCustomer () { $ this→具(客户::类名,(& # 39;id # 39;=祝辞& # 39;customer_id # 39;])→asArray (); }
关联查询控制器中这么写
order 美元;=,顺序:发现()→位置(“id"=祝辞& # 39;1 & # 39;)→(); customer 美元;=,美元订单→客户;
<强>注意点强>
1。关联查询会被缓存
所以
customer 美元;=,顾客::发现()→地方(& # 39;名字# 39;=祝辞& # 39;zhangsan& # 39;)→(); 设置(客户→美元订单);//清掉缓存 order 美元;=,美元客户→命令;
2。关联查询的多次查询
customers 美元;=,顾客::发现()→();//select *,得到客户 foreach (customers 美元;as 客户美元){ 美元$ order =,客户→订单;//select *,得到order where customer_id =,… }
以上代码执行了101次sql查询,可以进行如下优化
customers 美元;=,顾客::发现()→与(& # 39;订单# 39;)→();//select *,得到客户 foreach (customers 美元;as 客户美元){ 美元$ order =,客户→订单();//select *,得到order where customer_id 拷贝(…) }//变成了2次查询
关于怎么在YII框架中实现关联查询就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。