Magento 1.7:无法在产品集合中加入joinField

时间:2013-08-05 23:48:17

标签: magento magento-1.7

我遇到了一个问题,我无法将joinField()添加到产品集合中。我不知道为什么它不起作用,因为它应该非常简单或至少抛出一些错误。不用说,这让我疯了。我有兴趣查看产品和他们的销售总金额。这就是我从一本名为“Magento PHP Developer's Guide”和Magento Wiki的书中得到的。

public function getProducts($categoryId) { 

$productCollection = Mage::getModel('catalog/category')->load($categoryId)
    ->getProductCollection()
    ->joinField('o', 'sales_flat_order_item', array('o.row_total', 'o.product_id'), 'main_table.entity_id = o.product_id');
}

// die; when uncommented, this function WILL NOT die here

return $productCollection;
}

我正在从书中获得->joinField()方法,但它没有抓住任何产品。奇怪的是,该函数甚至没有返回任何内容,因为当die行被取消注释时,该函数不会在那里终止。相反,前端只是跳过这个函数而不会抛出任何错误(我现在可以看到)并且只是不显示使用此函数的任何块。我在这里缺少什么?

当我删除joinField()时,它会起作用。

$productCollection = Mage::getModel('catalog/category')->load($categoryIds)
    ->getProductCollection();

更新:

进一步测试表明以下工作。请注意,如果我使用main_table代替e,则工作。如果我查看从中生成的查询,main_table不会被主表替换;相反,查询包含文字字符串“main_table”。

$productCollection = Mage::getModel('catalog/category')->load($categoryIds)
    ->getSelect()
    ->join(array('o' => 'sales_flat_order_item'),
        'e.entity_id = o.product_id',
        'o.row_total'
    );

虽然没有。

$productCollection = Mage::getModel('catalog/category')->load($categoryIds)
    ->joinTable(
        array('o' => 'sales_flat_order_item'),
       'e.entity_id = o.product_id',
       'o.row_total'
    );

也许我没有看到一些简单的错误..但我只是看不出有什么不对。

1 个答案:

答案 0 :(得分:0)

public function getProducts($categoryId) { 
    $productCollection = Mage::getModel('catalog/category')->load($categoryId)
        ->getProductCollection()
        ->joinTable( // JoinTable makes more sense.
           array('o' => 'sales/order_item'),
           'main_table.entity_id = o.product_id'
           array('row_total'),
        )
    ;

    return $productCollection;
}

它可能会返回catalog_product_entity表中的所有字段以及row_total表中的sales_order_item。您可以在加入之前使用addAttributeToSelect('o.product_id'),只是为了清除不需要的字段。