我知道我在Magento目录中有一些完全缺少websiteID的产品。我试图找到这样的产品:
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('website_ids', 'null');
然而这会崩溃。在没有设置website_id的情况下获取产品集合的正确方法是什么?
答案 0 :(得分:2)
所有产品网站ID都存储在catalog_product_website
中。如果您在此处打开此表,则可以看到与网站相关联的产品。
这是过滤器,
<?php
require_once('app/Mage.php'); //Path to Magento
umask(0);
Mage::app();
echo '<pre>';
$collection = Mage::getResourceModel('catalog/product_collection');
$collection->addWebsiteFilter('0');
//echo $collection->getSelect(); exit;
$collection->getFirstItem();
// ->addAttributeToFilter('website_ids', 'null');
//echo $orders->getSelect();
//exit;
print_r($collection);
在此$collection->addWebsiteFilter('0');
过滤网站主题ID(目前为0),因此您可以将值更改为1,0,2或NULL
。就是这样。
在您的情况下,请尝试使用NULL或空白,例如&#39;&#39;。
<强>更新强>
如果您使用''
进行过滤,则会收到错误,因为表catalog_product_website
具有带有产品实体ID和网站ID的外键,这意味着website_id
无法解决问题是空的。所以尝试直接查询。在magento中,您可以通过此方式从集合中获取查询,
echo $collection->getSelect(); exit;
或使用此,
SELECT `e`.* FROM `catalog_product_entity` AS `e`
INNER JOIN `catalog_product_website` AS `product_website` ON product_website.product_id = e.entity_id AND product_website.website_id IN('')
如果您有任何疑问,请在此处发表评论。
答案 1 :(得分:1)
这对我有用
SELECT catalog_product_entity.entity_id
FROM catalog_product_entity
LEFT JOIN catalog_product_website
ON catalog_product_entity.entity_id = catalog_product_website.product_id
WHERE catalog_product_website.product_id IS NULL