我遇到了一个奇怪的问题,即产品集合在按类别 ID 过滤时以及当应包含在结果中的产品分配给多个类别时不返回任何产品。就这样吧。
产品ABC
被分配到类别91
和558
。
这是 Magento 代码(实际代码):
$categoryIds = array(91,369);
$collection = mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect(array('name','price','special_price','sku','small_image'))
->joinField('category_id', // add category ID field to collection
'catalog_category_product',
'category_id',
'product_id=entity_id',
null,
'left')
->addAttributeToFilter('category_id', array('in' => $categoryIds));
对应查询
SELECT `e`.*, `at_category_id`.`category_id`
FROM `catalog_product_entity` AS `e`
LEFT JOIN `catalog_category_product` AS `at_category_id`
ON (at_category_id.`product_id`=e.entity_id)
WHERE (at_category_id.category_id IN(91, 369));
这将返回 product ABC
。
现在,ABC
就像开头提到的那样分为两类。所以,如果我设置$categoryIds = array(91,558)
,它应该做...WHERE (at_category_id.category_id IN(91, 558))
并返回ABC
两次。但是.. 发生某种错误(未记录)并且没有返回任何内容。由于由于某种原因没有记录日志,我不知道问题出在哪里。然后,我添加了->group(array('sku'))
它,它可以工作并返回ABC
一次..(如果按其他列分组将不起作用)。为什么会这样?
我想我在某处读到产品集合不会让您拥有重复的实体 ID。在这种情况下,这是有道理的。但为什么没有错误?