Finden Sie Produkte ohne Bilder

9

Ist es möglich, eine Abfrage auszuführen, um eine Liste von Produkten zu finden, denen keine Bilder zugewiesen sind? Idealerweise möchte ich, dass SKUs auf dem Bildschirm ausgedruckt werden.

Francis Kim
quelle

Antworten:

16

Sie finden die Sammlung für den folgenden Code.

$_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' => '%/%/%'
        ),
    ));

Sie können alle Produktlisten erhalten, denen keine Bilder zugewiesen sind.

Keyul Shah
quelle
9

Wenn Sie nur die Produkte wollen, die nicht über image, small_imageoder thumbnailzugewiesen dann die Antworten von @KeyulShah oder @TBIInfotech geben Ihnen genau das.

Wenn Sie möchten, dass die Produkte überhaupt keine Bilder enthalten, können Sie diese Abfrage in der Datenbank ausführen und abrufen.

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

Wenn Sie die havingAnweisung entfernen , erhalten Sie ein zweispaltiges Ergebnis mit dem Produkt-Skus und der Anzahl der ihnen zugewiesenen Bilder.

Sie können das einfach als CSV exportieren.

Marius
quelle
Wird es in Magento2 funktionieren?
Amit Singh
wahrscheinlich, aber ich kann es nicht garantieren
Marius
5

Nur eine kleine Änderung an dem, was @keyul shah beschrieben hat, setzen Sie einfach den Code auf magento root:

<?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
quelle
Ihre Lösung hat großartig funktioniert. Ich habe Ihnen eine positive Bewertung gegeben, werde aber die Antwort auf den ursprünglichen Beitrag vergeben.
Francis Kim
2

Das funktioniert bei mir ....

$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'
    );
Rahul Dadhich
quelle
Dies funktioniert besser, denn wenn das Produkt noch kein Image hat, existiert die Attributbeziehung wahrscheinlich nicht und funktioniert wahrscheinlich nicht richtig.
Beto Castillo
1

Wenn jemand nach Magento 2 sucht, wird dies funktionieren. Es ist dasselbe wie bei @Marius, der gerade eine Tabelle hinzugefügt hat.

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 
Amit Singh
quelle