怎么在YII框架中实现关联查询

  介绍

这篇文章给大家介绍怎么在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框架中实现关联查询就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

怎么在YII框架中实现关联查询