2014-10-22 75 views
1

我知道我在Magento目录中有一些产品完全缺少websiteID。我试图找到这样的产品:如何使用Magento中没有websiteID的产品进行产品收藏?

$products = Mage::getModel('catalog/product') 
    ->getCollection() 
    ->addAttributeToSelect('*') 
    ->addAttributeToFilter('website_ids', 'null'); 

然而这会崩溃。提取没有设置website_id的产品收集的正确方法是什么?

回答

1

所有的产品网站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');过滤webssite IDS(当前为0),这样你就可以更改值as1,0,2或NULL。而已。

在你的情况下,尝试使用NULL或空像''。

更新:

如果用''过滤器,你会得到错误,因为有与产品实体ID和网站ID,这意味着该website_id不能为空外键的表catalog_product_website。所以请尝试直接查询。 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('') 

如果您有任何疑问,请在这里评论。

+0

感谢您的帮助,但是使用“”或“空”返回“无效的网站代码请求”,并使用NULL返回所有产品。也许我必须通过对表格的直接查询来做到这一点。 :/ – DarkVader 2014-10-23 08:20:48

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