【问题标题】:Select only specific fields in Magento仅选择 Magento 中的特定字段
【发布时间】:2011-12-08 15:15:14
【问题描述】:

我正在尝试使用 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.* 并只使用特定字段?

谢谢。

【问题讨论】:

    标签: magento collections


    【解决方案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));
    

    【讨论】:

    • 谢谢!在 Magento 文档上看到了 reset 方法,但没有看到参数值。我想我也应该学习 Zend。
    • 正是我一直在寻找的东西。绝对棒的答案!谢谢你拯救了我的一天!
    • 让我免于搜索太久,我在尝试设置“from”中的列同时添加“join”时遇到了这个问题,我不知道为什么它包括其他列加入表格。这个重置技巧解决了它!
    【解决方案2】:

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

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

    【讨论】:

    • 您可以选择多个带有数组的字段,例如$Collection->addFieldToSelect(array('field_1', 'field_2');
    • 感谢这个简单易用的解决方案!在 Magento 2.1 中效果很好!
    【解决方案3】:

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

    我自己也遇到过类似的问题,最终查了源码直到找到Zend_Db_SelectZend Documentation(例8)。

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

    【讨论】:

      【解决方案4】:

      只需要使用“getColumnValues

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-29
        • 1970-01-01
        • 1970-01-01
        • 2012-10-15
        • 2013-08-08
        • 1970-01-01
        相关资源
        最近更新 更多