我如何在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中做这样的事情的正确方法是什么?
答案 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'),