Bir MySQL sorgusu kullanarak tüm devre dışı ürünleri listelemek gerekiyor.
Veritabanımda böyle bir şey kullanmak için çok fazla ürün var (koleksiyon oluşturma, yükleme ve üzerinde döngü): http://www.srikanth.me/get-all-disabled-products-on-magento/
Bir MySQL sorgusu kullanarak tüm devre dışı ürünleri listelemek gerekiyor.
Veritabanımda böyle bir şey kullanmak için çok fazla ürün var (koleksiyon oluşturma, yükleme ve üzerinde döngü): http://www.srikanth.me/get-all-disabled-products-on-magento/
Yanıtlar:
Magento ürünü olarak EAV yapısını
Ve table arasında bir Sorgu yazmanız gerekiyoreav_attribute
catalog_product_entity_int
Magento ürün durumunu tablo catalog_product_entity_int
tablosuna kaydedin . 1 ve 2 olarak kaydedin.
Özellik kodu kullanarak status özellik kimliği almanız gerekir status
, temel olarak 96'dır.
Varlık_kimliği `catalog_product_entity_int` NEREDE attribute_id = ( "Eav_attribute" dan SEÇİN öznitelik_kimliği NEREDE `attribute_code` LIKE 'durumu' ) AND `catalog_product_entity_int`.value = 2
Magento Sorgusu
$productsCollection = Mage::getModel('catalog/product')->getCollection()
->addAttributeToFilter('status', 2); // added enabled
MySQL Sorgusu
SELECT `e`.*, IF(at_status.value_id > 0, at_status.value, at_status_default.value) AS `status`
FROM `catalog_product_entity` AS `e`
INNER JOIN `catalog_product_entity_int` AS `at_status_default`
ON (`at_status_default`.`entity_id` = `e`.`entity_id`)
AND (`at_status_default`.`attribute_id` = '96')
AND `at_status_default`.`store_id` = 0
LEFT JOIN `catalog_product_entity_int` AS `at_status`
ON (`at_status`.`entity_id` = `e`.`entity_id`)
AND (`at_status`.`attribute_id` = '96')
AND (`at_status`.`store_id` = 1)
WHERE (IF(at_status.value_id > 0, at_status.value, at_status_default.value) = '2')
Değişiklik Sonrası - Bu "Engelli" Öğeleri (2 değeri) bulmam gerekiyordu. İşte hangi ürünleri aslında "Etkin" olması gereken ateş sorun için kullanılan birkaç ekstra alana sahip geçerli bir mysql sorgusu
select
`eav_attribute`.`attribute_id` AS `attribute_id`,
`catalog_product_entity_int`.`entity_id` AS `entity_id`,
`catalog_product_entity_int`.`value` AS `value`,
`eav_attribute`.`attribute_code` AS `attribute_code`,
`catalog_product_entity`.`sku` AS `sku`,
`catalog_product_entity`.`created_at` AS `created_at`,
`catalog_product_entity`.`updated_at` AS `updated_at`
from
((`eav_attribute`
join `catalog_product_entity_int` on ((`eav_attribute`.`attribute_id` = `catalog_product_entity_int`.`attribute_id`)))
join `catalog_product_entity` on ((`catalog_product_entity_int`.`entity_id` = `catalog_product_entity`.`entity_id`)))
where
((`eav_attribute`.`attribute_code` = 'status') and
(`catalog_product_entity_int`.`value` = 2));
@Amit Bera yanıtı en iyisidir, ancak "status" adında birden fazla öznitelik kodunuz varsa (benim durumumda toplam 5 "durum" satırına sahibim) varsa SQL isteği işe yaramaz ve MySQL size şunu döndürür: #1242 - Subquery returns more than 1 row
hata.
Bu yüzden kaynak_model 'katalog / product_status' gibi çalışmak için ekleyerek SQL sorgusunu tamamlamak:
Varlık_kimliği `catalog_product_entity_int` NEREDE attribute_id = ( "Eav_attribute" dan SEÇİN öznitelik_kimliği NEREDE `attribute_code` LIKE 'durumu' VE `` source_model`` GİBİ '' katalog / product_status ' ) AND `catalog_product_entity_int`.value = 2