Подтвердить что ты не робот

Выберите только определенные поля в Magento

Я пытаюсь использовать функцию 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.* из запроса и использовать только определенные поля?

Спасибо.

4b9b3361

Ответ 1

Здесь можно использовать трюк 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));

Ответ 2

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

$Collection = Mage::getModel('showdown/votes')->getCollection();
$Collection->addFieldToSelect('id');

Ответ 3

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

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

$select = $db->select()
    ->from(array('p' => 'products'),
           array('product_id', 'product_name'));