#magento
#magento
Вопрос:
Как использовать агрегатные функции, такие как sum(), count() в Magento ORM.
Рассмотрим, что существует таблица «test» со следующими значениями
-------------------------------------
productid | qty
-------------------------------------
1 | 2
-------------------------------------
2 | 3
-------------------------------------
3 | 5
-------------------------------------
и если бы я сопоставил эту таблицу в своем модуле, чтобы я мог получить данные коллекции, такие как
$_collection = Mage::getModel('mymodule/customcart')->getCollection();
как мне получить результат, эквивалентный приведенному ниже запросу с КОЛЛЕКЦИЕЙ?
select sum(qty) from test;
Ответ №1:
Если ваша 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
функцию, которая возвращает точное количество.
Комментарии:
1. @clockworkgeek как я могу попробовать этот запрос в коллекции magento: выберите сумму (кол-во productid — any_other_columns) из теста;
2. @VijayS если вы не можете разобраться с вышесказанным, потому что ваша ситуация отличается, пожалуйста, задайте новый вопрос, возможно, ссылаясь на этот и объясняя, чем он отличается.