2013-08-05 28 views
0

我遇到了问题,我无法将joinField()添加到产品集合中..我不知道为什么它不起作用,因为它应该非常简单或至少抛出一些错误。毋庸置疑,这让我疯狂。我有兴趣查看产品和他们销售的总金额。这是我从一本名为“Magento PHP开发人员指南”和Magento Wiki的书中得到的。Magento 1.7:无法在产品集合中包含joinField

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(); 

UPDATE:

进一步的测试表明,以下几项工作。请注意,如果我使用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

你有一个语法错误:'}'应该在'return ...;'之后# –

+0

表别名不应该被替换 - 所以没关系。当我直接使用资源模型连接表时,我忘记了主表可能被别名为e。 –

回答

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表PLUS各个领域的row_totalsales_order_item表。您可以在联接之前使用addAttributeToSelect('o.product_id'),只是为了清除不需要的字段。

+0

虽然同样的问题仍然存在。一旦添加了' - > joinTable()',该函数就不起作用。它不会抛出任何错误,并以某种方式Magento跳过它并呈现前端页面的其余部分。即使我把代码中的'return'放在'return'之后,它也不会在那里结束。我甚至无法用'printlogquery'打印查询。我注意到第二个参数后的逗号。所以这不是一个语法问题。 – musicliftsme

+0

我设法让'join()'而不是'joinTable()'工作。我更新了我的帖子。你可以看一看,看看有什么不对吗? – musicliftsme

+0

返回结束执行。一个'死'功能,它不会做任何事情。 –