Buscar productos sin imágenes

9

¿Es posible ejecutar una consulta para encontrar una lista de productos sin imágenes asignadas? Idealmente, me gustaría que los SKU se impriman en la pantalla.

Francis Kim
fuente

Respuestas:

16

Puede encontrar la colección para el siguiente código.

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

puede obtener toda la lista de productos que no tiene asignación de imágenes.

Keyul Shah
fuente
9

Si desea que sólo los productos que no tienen image, small_imageo thumbnailasignados a continuación las respuestas de @KeyulShah o @TBIInfotech le dará exactamente eso.

Si desea los productos que no tienen imágenes, puede ejecutar esta consulta en la base de datos y obtenerlos.

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 elimina la havingdeclaración, obtendrá un resultado de 2 columnas con los skus del producto y el número de imágenes asignadas a ellos.

Puede exportar eso como un csv.

Marius
fuente
¡Por casualidad funcionará en Magento2!
Amit Singh el
probablemente, pero no puedo garantizarlo
Marius
5

Solo una pequeña modificación a lo que @keyul shah describió, solo ponga el código en la raíz de 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
fuente
Su solución funcionó muy bien, le di un voto positivo, pero otorgaré la respuesta a la publicación original.
Francis Kim
2

Esto funciona para mi ...

$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
fuente
Esto funciona mejor, porque si el producto aún no tiene imagen, probablemente la relación de atributo no existe, y probablemente no funcionará correctamente.
Beto Castillo el
1

Si alguien busca Magento 2. Esto funcionará. Es lo mismo que @Marius acaba de agregar una tabla.

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
fuente