仅选择Magento中的特定字段

Jen*_*nny 21 collections magento

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

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

这是结果查询:

SELECT `main_table`.*, MAX(created) AS `max_created` FROM `em_ticket_updates` AS `main_table` GROUP BY `status_id` 
Run Code Online (Sandbox Code Playgroud)

这样做的问题是,如果包含所有字段(main_table.*),它将无法正常运行.

有没有办法main_table.*从查询中删除并只使用特定字段?

谢谢.

clo*_*eek 47

这里可以使用Zend技巧.

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

注意:

对于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));
Run Code Online (Sandbox Code Playgroud)


Nee*_*arg 6

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

$Collection = Mage::getModel('showdown/votes')->getCollection();
$Collection->addFieldToSelect('id');
Run Code Online (Sandbox Code Playgroud)

  • 你可以用数组选择多个字段,例如`$ Collection-> addFieldToSelect(array('field_1','field_2');` (3认同)

ash*_*ash 5

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

我自己也有类似的问题,我最终搜索了源代码,直到我达到了Zend_Db_Select咨询Zend文档后(例8).

$select = $db->select()
    ->from(array('p' => 'products'),
           array('product_id', 'product_name'));
Run Code Online (Sandbox Code Playgroud)