Агрегатные функции в Magento ORM - PullRequest
4 голосов
/ 26 апреля 2011

Как использовать агрегатные функции, такие как sum (), count () в Magento ORM.

Предположим, есть таблица "test" со следующими значениями


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

и если я отобразил эту таблицу в своем модуле, чтобы я мог получить данные сбора, такие как


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

как мне получить результат, эквивалентный приведенному ниже запросу с COLLECTION?


select sum(qty) from test;

1 Ответ

16 голосов
/ 26 апреля 2011

Если ваша коллекция mymodule/customcart основана на EAV, вы можете использовать addExpressionAttributeToSelect

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

В противном случае вам придется работать с SQL более напрямую:

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

Будьте осторожны при использовании агрегированных коллекций с сетками или пейджерами. Они полагаются на getSelectCountSql, который плохо обрабатывает сгруппированные запросы, возможно, вам придется предоставить собственную функцию getSelectCountSql, которая возвращает точное количество.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...