0

我遇到了一个问题,我无法添加joinField()到产品集合中。我不知道为什么它不起作用,因为它应该非常简单或至少会引发一些错误。不用说,这让我发疯了。我有兴趣查看产品和它们的总销售额。这是我从一本名为“Magento PHP 开发人员指南”和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'
    );

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

4

1 回答 1

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_totalsales_order_item字段。您可能可以addAttributeToSelect('o.product_id')在加入之前使用,只是为了清除不需要的字段。

于 2013-08-06T01:57:33.907 回答