Magento:使用集合获取没有图像的产品

时间:2013-06-03 08:16:21

标签: magento

我想通过image过滤产品集合而不是null。最简单的方法应该是提到here的方法,但这不起作用:返回的集合没有元素。

我认为这里的问题是,从未拥有图像的产品与product / media_gallery表之间没有任何关系。因此,当Magento尝试使用所有这些条件进行过滤时,返回的集合为空。它没有考虑到它可能不是所涉及的表之间的任何类型的关系。

$collection->addAttributeToFilter(array(
        array (
            'attribute' => 'image',
            'like' => 'no_selection'
        ),
        array (
            'attribute' => 'image', // null fields
            'null' => true
        ),
        array (
            'attribute' => 'image', // empty, but not null
            'eq' => ''
        ),
        array (
            'attribute' => 'image', // check for information that doesn't conform to Magento's formatting
            'nlike' => '%/%/%'
        ),
    ));

我想我应该使用joinLeft条件,但我不知道应该如何。可以请任何人帮助我吗?

我找到了very interesting query应该可以解决的问题。但是我需要将它应用到我的收藏中:

SELECT *
FROM `catalog_product_entity` AS a
LEFT JOIN `catalog_product_entity_media_gallery` AS b ON a.entity_id = b.entity_id
WHERE b.value IS NULL

由于

2 个答案:

答案 0 :(得分:3)

要将查询应用于您的产品系列,您可以使用

$collection->getSelect()
    ->joinLeft(
        array('_gallery_table' => $collection->getTable('catalog/product_attribute_media_gallery')),
        'e.entity_id = _gallery_table.entity_id',
        array()
    )
    ->where('_gallery_table.value IS NULL');

答案 1 :(得分:0)

相同的答案,但对于 magento 2:

use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
........
/**
 * @var CollectionFactory
 */
public $productCollectionFactory;
........
$collection = $this->productCollectionFactory->create();
$collection->addAttributeToSelect('*');
$collection->getSelect()
    ->joinLeft(
        ['gallery_table' => $collection->getTable('catalog_product_entity_media_gallery_value_to_entity')],
        'e.entity_id = gallery_table.entity_id',
        []
    )
    ->where('gallery_table.value_id IS NULL');