5

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

问题:
我有一张Orders表和一张Products表。
每个产品与订单关联 0 次或多次

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

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

问题是当我调用$order->products时,它只返回唯一的产品,而不是每次相关的产品。

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

'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 中做这样的事情的正确方法是什么?

4

2 回答 2

1

正确的方法是使用 Statistical Query。就是为了这些目的。

不优雅的方式

但是,如果我然后尝试调用 $order->products[0]->count 它说计数尚未定义。

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

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

于 2012-11-07T20:31:42.383 回答
0

要使用它,您确实需要count在 Product 类中定义属性

'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'),
于 2012-11-08T05:27:24.357 回答