好的,所以我有这样的模型: Product (product_id) Order (order_id, product_id) OrderProduct (order_id, product_id)
产品型号有关系
'orders'=>array(self::HAS_MANY,'Order',array('order_id'=>'order_id'),'through'=>'orderedProducts'),
我的任务是 - 计算每个产品 - >订单,而不加载所有订单模型。
正如罗斯建议的那样,我创建了 STAT 关系
'statOrders'=>array(self::STAT,'Order',array('order_id'=>'order_id'),'through'=>'orderedProducts'),
最终,当我调用 $product->statOrders 时,我得到了一个异常 CStatRelation has no 'through' attribute
这意味着如果我想让它发挥作用,我必须发明另一种方式来描述产品和订单之间的关系。这比重复更糟糕。
最后我想出了这个解决方法:
$c=$product->getRelated('orders', true, аггау('select'=>'CОUNТ(огdегѕ.огdег_іd) as order_id', 'gгоuр'=>'ргоduсt_іd'));
$count=$c[О]->order_id;
• 无需描述新关系
• 它使干净的 sql 查询:
system.db.CDbCommand.query(SELECT COUNT(orders.order_id) as order_id, `orders`.`order_id` AS `t1_c0` FROM `orders` `orders` LEFT OUTER JOIN `orders_products` `orderedProducts` ON (`orderedProducts`.`order_id`=`orders`.`order_id`) WHERE (`orderedProducts`.`product_id`=:ypl0) GROUP BY product_id. Bound with :ypl0='458739')
• 您可以动态添加参数:
• 以此类推,您可以计算订单中的产品数量(每个订单中的产品数量之和):
我目前的最终解决方案: