Найти товары без изображений

9

Можно ли выполнить запрос, чтобы найти список продуктов без назначенных им изображений? В идеале я хотел бы, чтобы на экране были напечатаны SKU.

Фрэнсис Ким
источник

Ответы:

16

Вы можете найти коллекцию для кода ниже.

$_products = Mage::getModel('catalog/product')
    ->getCollection()
    ->addAttributeToSelect('*')
    ->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' => '%/%/%'
        ),
    ));

Вы можете получить весь список продуктов, который не имеет назначенных изображений.

Кейул Шах
источник
9

Если вы хотите только те продукты , которые не имеют image, small_imageили thumbnailназначенные затем ответы от @KeyulShah или @TBIInfotech даст вам только что.

Если вам нужны продукты, у которых вообще нет изображений, вы можете выполнить этот запрос в базе данных и получить их.

SELECT
    e.sku, COUNT(m.value) as cnt
FROM
    catalog_product_entity e 
    LEFT JOIN catalog_product_entity_media_gallery m
        ON e.entity_id = m.entity_id
GROUP BY
    e.entity_id
HAVING
    cnt = 0

Если вы удалите havingоператор, вы получите результат в 2 столбца с названием продукта и количеством назначенных ему изображений.

Вы можете просто экспортировать это как CSV.

Мариус
источник
В любом случае это будет работать в Magento2!
Амит Сингх
возможно, но я не могу этого гарантировать
Мариус
5

Просто небольшая модификация того, что описал @keyul shah, просто поместите код в корень magento:

<?php 

require 'app/Mage.php';
Mage::app();
$_products = Mage::getModel('catalog/product')
    ->getCollection()
    ->addAttributeToSelect('*')
    ->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' => '%/%/%'
        ),
    ));

foreach($_products as $_product){

    echo $_product->getSku();

}
TBI Infotech
источник
Ваше решение сработало отлично, я дал вам отзыв, но присуду ответ на оригинальный пост.
Фрэнсис Ким
2

Это работает для меня ....

$products = Mage::getModel('catalog/product')
    ->getCollection()
    ->addAttributeToSelect('*')
    ->addAttributeToFilter(
        array(
            array(
                'attribute' => 'image',
                'null' => '1'
            ),
            array(
                'attribute' => 'small_image',
                'null' => '1'
            ),
            array(
                'attribute' => 'thumbnail',
                'null' => '1'
            ),
            array(
                'attribute' => 'image',
                'nlike' => '%/%/%'
            ),
            array(
                'attribute' => 'small_image',
                'nlike' => '%/%/%'
            ),
            array(
                'attribute' => 'thumbnail',
                'nlike' => '%/%/%'
            )
        ),
        null,
        'left'
    );
Рахул Дадхич
источник
Это работает лучше, потому что, если у продукта еще нет изображения, вероятно, отношение атрибута не существует, и, вероятно, не будет работать правильно.
Бето Кастильо
1

Если кто-то ищет Magento 2. Это будет работать. Это так же, как @Marius только что добавил одну таблицу.

SELECT 
     e.sku, COUNT(m.value) as cnt
FROM catalog_product_entity e
LEFT JOIN catalog_product_entity_media_gallery_value_to_entity r
    ON e.entity_id = r.entity_id
LEFT JOIN catalog_product_entity_media_gallery m
    ON r.value_id = m.value_id

GROUP BY
    e.entity_id
HAVING
    cnt = 0 
Амит Сингх
источник