Yii如何计算相关模型(getRelation with params)?
我有很多关系,叫做“relationName” 所以我可以使用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” 但我如何计算它
$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')
•您可以动态添加参数:
•通过类比,您可以计算订单中的产品数量(每个订单中的产品数量总和):
我目前的最终解决方案:
谢谢,但是你确定没有创建附加关系就没有简单的计数方法吗?谢谢,但是你确定没有创建附加关系就没有简单的计数方法吗?