Yii - 与同一模型的多重关系

时间:2012-11-07 20:02:57

标签: php mysql activerecord yii many-to-many

我如何在YII每次与给定模型关联时获取相关模型,或者至少计算它发生了多少次?

问题:
我有订单表和商品每个产品与订单关联0次或更多次

如何通过YII中的标准关系工具告知产品在订单上的次数? 我通过联合表创建了一个多对多的关系,并用它来声明我的关系

'products'=>array(self::MANY_MANY, 'Product', 'index_order_products(order_id, product_id)')

问题是,当我打电话给 $ order->产品时,它只返回唯一的产品,而不是每次产品相关的产品。

我只需要知道订单上每种产品的数量,所以我试过

'products'=>array(self::MANY_MANY, 'Product', 'index_order_products(order_id, product_id)', 'select'=>'*, COUNT(product_id) as count', 'group'=>'product_id')

但如果我尝试拨打$order->products[0]->count,则表示尚未定义计数 我设法通过在数据库中创建一个空列计数来绕过这个。这样我得到了我需要的数字,但肯定有更好的方法。

在YII中做这样的事情的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

正确的方法是使用Statistical Query。它是出于这些目的。

非优雅的方式

  

但如果我尝试拨打$ order->产品[0] - >算一下就算数   尚未定义。

这是因为您正在从评估关系时未返回的对象访问计数。 使用CVarDumper::Dump($order->products)查看查询时获得的内容

或另一种方式可能是count($order->products[0])

答案 1 :(得分:0)

要使用此功能,您需要在Product class

中定义count属性
'products'=>array(self::MANY_MANY, 'Product', 'index_order_products(order_id, product_id)', 'select'=>'*, COUNT(product_id) as count', 'group'=>'product_id')

 class Product extend CActiveRecord {
     public $count = 0;
 // skip in rules function add this
     array('count', 'safe'),