Yii如何计算相关模型(getRelation with params)?

Yii如何计算相关模型(getRelation with params)?,yii,count,params,yii-relations,Yii,Count,Params,Yii Relations,我有很多关系,叫做“relationName” 所以我可以使用 $model->relationName; 或使用 $model->getRelated('relationName'); 通过添加参数,我还可以获得relatedModels的子集 $model->getRelated('relationName', true, array('fieldName'=>'val')); 因此,我将得到所有相关模型的子集,其中fieldName=“val” 但我如何计算它

我有很多关系,叫做“relationName”

所以我可以使用

$model->relationName;
或使用

$model->getRelated('relationName');
通过添加参数,我还可以获得relatedModels的子集

$model->getRelated('relationName', true, array('fieldName'=>'val'));
因此,我将得到所有相关模型的子集,其中fieldName=“val”

但我如何计算它们呢?

这个想法看起来很糟糕(因为它需要所有模型,然后计算它们):

我需要的东西将最终用COUNT()构建查询,并返回结果

使用STAT-relation看起来也是个坏主意(因为我已经在代码中描述了关系,为什么我要复制关系的描述?)


因此,有没有什么好的解决方案可以使用动态参数计算相关(有很多)模型?

如果您希望它作为count()查询运行,最好的选择是使用stat关系


'countOfRelationName'=>数组(self::STAT,'relationship','field','condition'=>'field=val')

如果希望它作为COUNT()查询运行,最好的选择是使用stat关系


'countOfRelationName'=>数组(self::STAT,'relationship','field','condition'=>'field=val')

好的,我有这样的型号: 产品(产品标识) 订单(订单id、产品id) OrderProduct(订单id、产品id)

产品模型之间存在关联

'orders'=>array(self::有许多,'Order',array('Order\u id'=>'Order\u id'),'through'=>'orderedProducts')

我的任务是——统计每个产品->订单,而不加载所有订单模型

正如罗斯所建议的,我创建了统计关系

'statOrders'=>array(self::STAT,'Order',array('Order\u id'=>'Order\u id'),'through'=>'orderedProducts')

最后,当我调用$product->statOrders时,我得到一个异常CStatRelation没有“through”属性

这意味着,如果我想让它发挥作用,我必须发明另一种方式来描述产品和订单之间的关系。。这比复制还要糟糕

最后我想出了一个解决办法:

$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')
•您可以动态添加参数:

•通过类比,您可以计算订单中的产品数量(每个订单中的产品数量总和):

我目前的最终解决方案:

好的,我有这样的模型: 产品(产品标识) 订单(订单id、产品id) OrderProduct(订单id、产品id)

产品模型之间存在关联

'orders'=>array(self::有许多,'Order',array('Order\u id'=>'Order\u id'),'through'=>'orderedProducts')

我的任务是——统计每个产品->订单,而不加载所有订单模型

正如罗斯所建议的,我创建了统计关系

'statOrders'=>array(self::STAT,'Order',array('Order\u id'=>'Order\u id'),'through'=>'orderedProducts')

最后,当我调用$product->statOrders时,我得到一个异常CStatRelation没有“through”属性

这意味着,如果我想让它发挥作用,我必须发明另一种方式来描述产品和订单之间的关系。。这比复制还要糟糕

最后我想出了一个解决办法:

$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')
•您可以动态添加参数:

•通过类比,您可以计算订单中的产品数量(每个订单中的产品数量总和):

我目前的最终解决方案:

谢谢,但是你确定没有创建附加关系就没有简单的计数方法吗?谢谢,但是你确定没有创建附加关系就没有简单的计数方法吗?