我遇到了一个问题,我无法将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'
);
也许我没有看到一些简单的错误..但我只是看不出有什么不对。
答案 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')
,只是为了清除不需要的字段。