Magento ORM中的聚合函数

bal*_*anv 4 magento

如何在Magento ORM中使用sum(),count()等聚合函数.

考虑有一个表"test",其中包含以下值


-------------------------------------
productid           |          qty
-------------------------------------
1                   |            2
-------------------------------------
2                   |            3
-------------------------------------
3                   |            5
-------------------------------------

如果我在我的模块中映射这个表,那么我可以得到像这样的集合数据


$_collection = Mage::getModel('mymodule/customcart')->getCollection();

如何使用COLLECTION获得与以下查询等效的结果?


select sum(qty) from test;

clo*_*eek 16

如果您的mymodule/customcart收藏品是基于EAV的,您可以使用addExpressionAttributeToSelect

$_collection = Mage::getModel('mymodule/customcart')->getCollection();
$_collection->addExpressionAttributeToSelect('qty', 'SUM({{item_qty}})', 'item_qty')
    ->groupByAttribute('productid');
Run Code Online (Sandbox Code Playgroud)

否则,您将不得不更直接地使用SQL:

$_collection = Mage::getModel('mymodule/customcart')->getCollection();
$_collection->getSelect()
    ->columns('SUM(item_qty) AS qty')
    ->group('productid');
Run Code Online (Sandbox Code Playgroud)

使用带有网格或寻呼机的聚合集合时要小心.他们依赖于getSelectCountSql哪些不能很好地处理分组查询,您可能必须提供自己的getSelectCountSql函数来返回准确的计数.