Можно ли выполнить запрос, чтобы найти список продуктов без назначенных им изображений? В идеале я хотел бы, чтобы на экране были напечатаны SKU.
Можно ли выполнить запрос, чтобы найти список продуктов без назначенных им изображений? В идеале я хотел бы, чтобы на экране были напечатаны SKU.
Ответы:
Вы можете найти коллекцию для кода ниже.
$_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' => '%/%/%'
),
));
Вы можете получить весь список продуктов, который не имеет назначенных изображений.
Если вы хотите только те продукты , которые не имеют 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.
Просто небольшая модификация того, что описал @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();
}
Это работает для меня ....
$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'
);
Если кто-то ищет 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