我想通过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
由于
答案 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');