Znajdź produkty bez zdjęć


9

Czy można uruchomić zapytanie, aby znaleźć listę produktów bez przypisanych do nich zdjęć? Idealnie chciałbym, aby kody SKU były drukowane na ekranie.

Odpowiedzi:


16

Możesz znaleźć kolekcję poniżej kodu.

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

możesz pobrać całą listę produktów, do której nie przypisano obrazów.


9

Jeśli chcesz tylko produkty, które nie mają image, small_imagelub thumbnailprzypisane następnie odpowiedzi od @KeyulShah lub @TBIInfotech daje tylko to.

Jeśli chcesz produktów, które w ogóle nie mają obrazów, możesz uruchomić to zapytanie w bazie danych i je uzyskać.

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

Jeśli usuniesz havingoświadczenie, otrzymasz wynik 2 kolumn wraz ze skuską produktu i liczbą przypisanych do nich obrazów.

Możesz to po prostu wyeksportować jako plik csv.


Czy przypadkiem zadziała w Magento2!
Amit Singh,

prawdopodobnie, ale nie mogę tego zagwarantować
Marius

5

Wystarczy niewielka modyfikacja tego, co opisał @keyul shah, po prostu umieść kod w katalogu głównym 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();

}

Twoje rozwiązanie działało świetnie, dałem ci głos, ale udzielę odpowiedzi na oryginalny post.
Francis Kim

2

To działa dla mnie ....

$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'
    );

Działa to lepiej, ponieważ jeśli produkt nie ma jeszcze obrazu, prawdopodobnie relacja atrybutów nie istnieje i prawdopodobnie nie będzie działać poprawnie.
Beto Castillo,

1

Jeśli ktoś szuka Magento 2. To zadziała. To samo, co @Marius właśnie dodał jedną tabelę.

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 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.