Выберите только определенные поля в Magento - PullRequest
21 голосов
/ 08 декабря 2011

Я пытаюсь использовать функцию MAX в MySQL для получения самых последних дат из моей таблицы.

$_updates = Mage::getModel('ticket/updates')->getCollection();  
$_updates->getSelect()->columns('MAX(created) as max_created')->group(array('status_id'));

Это результирующий запрос:

SELECT `main_table`.*, MAX(created) AS `max_created` FROM `em_ticket_updates` AS `main_table` GROUP BY `status_id` 

Проблема в том, что если все поля включены (main_table.*), он не будет работать правильно.

Есть ли способ удалить main_table.* из запроса и использовать только определенные поля?

Спасибо.

Ответы [ 3 ]

46 голосов
/ 08 декабря 2011

Здесь можно использовать трюк Zend.

$_updates->getSelect()
    ->reset(Zend_Db_Select::COLUMNS)
    ->columns('MAX(created) as max_created')
    ->group(array('status_id'));

ПРИМЕЧАНИЕ:

Для коллекции EAV вам придется повторно добавить entity_id, иначе у вас будет ошибка при загрузке коллекции

    $collection = Mage::getModel('catalog/product')
        ->getCollection();
    $collection->getSelect()
        ->reset(Zend_Db_Select::COLUMNS)
        ->columns(array('entity_id')); 

    $collection
        ->addAttributeToSelect(array('image','small_image','thumbnail'))
        ->addFieldToFilter('entity_id', array('in' => $simple_ids));
6 голосов
/ 19 мая 2014

Magento обеспечивает функциональность addFieldToSelect ().Используйте код ниже, чтобы получить конкретное поле.

$Collection = Mage::getModel('showdown/votes')->getCollection();
$Collection->addFieldToSelect('id');
5 голосов
/ 06 февраля 2014

Я признаю, что это старый пост, но я думал, что опубликую альтернативное решение.

У меня была похожая проблема, я в конечном итоге искал источник, пока не достиг Zend_Db_Select После консультации с Zend Documentation (Пример 8).

$select = $db->select()
    ->from(array('p' => 'products'),
           array('product_id', 'product_name'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...