仅选择Magento中的特定字段

时间:2011-12-08 15:15:15

标签: magento collections

我正在尝试使用MySQL的MAX函数从我的表中检索最新日期。

$_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.*并仅使用特定字段?

感谢。

4 个答案:

答案 0 :(得分:45)

这里可以使用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));

答案 1 :(得分:6)

Magento提供addFieldToSelect()功能。使用下面的代码来获取特定字段。

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

答案 2 :(得分:5)

我知道这是一个老帖子,但我想我会发布一个替代解决方案。

我自己也遇到了类似的问题,在查阅Zend Documentation(例8)后,我最终搜索了来源Zend_Db_Select

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

答案 3 :(得分:0)

只需要使用“getColumnValues

$_updates = Mage::getModel('ticket/updates')->getCollection(); 
$columnValues = $_updates->getColumnValues('Your Column Name');