Rechercher des produits sans images

9

Est-il possible d'exécuter une requête pour trouver une liste de produits sans images qui leur sont attribuées? Idéalement, j'aimerais que les SKU soient imprimés à l'écran.

Francis Kim
la source

Réponses:

16

Vous pouvez trouver la collection pour le code ci-dessous.

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

vous pouvez obtenir toute la liste des produits qui n'a pas d'assignations d'images.

Keyul Shah
la source
9

Si vous ne voulez que les produits qui n'ont pas image, small_imageou thumbnailattribués, les réponses de @KeyulShah ou @TBIInfotech vous donneront exactement cela.

Si vous souhaitez que les produits ne contiennent aucune image, vous pouvez exécuter cette requête sur la base de données et les obtenir.

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

Si vous supprimez l' havingénoncé, vous obtiendrez un résultat sur 2 colonnes avec les références produit et le nombre d'images qui leur sont attribuées.

Vous pouvez simplement exporter cela au format csv.

Marius
la source
Par hasard, cela fonctionnera-t-il dans Magento2!
Amit Singh
probablement, mais je ne peux pas le garantir
Marius
5

Juste une petite modification de ce que @keyul shah a décrit, il suffit de mettre le code sur la racine 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
la source
Votre solution a très bien fonctionné, je vous ai donné un vote positif, mais accordera la réponse au message d'origine.
Francis Kim
2

Cela fonctionne pour moi ....

$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
la source
Cela fonctionne mieux, car si le produit n'a pas encore d'image, la relation d'attribut n'existe probablement pas et ne fonctionnera probablement pas correctement.
Beto Castillo le
1

Si quelqu'un cherche Magento 2. Cela fonctionnera. C'est la même chose que @Marius vient d'ajouter une table.

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
la source