Знайдіть продукти без зображень


9

Чи можливо запустити запит, щоб знайти список продуктів, не призначених їм зображень? В ідеалі хотілося б, щоб на екрані були надруковані артикули.

Відповіді:


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();

}

Ваше рішення спрацювало чудово, я дав вам нагороду, але отримаю відповідь за оригінальний пост.
Френсіс Кім

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 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.