2009-11-20 16 views
10

NULL değerleri ile olanak tanımak için Magento toplama yöntemi, addFieldToFilter mümkün kullanılarak? Özelliğe sahip bir koleksiyondaki tüm ürünleri, özniteliğe hiçbir değer atanmamış olsa bile seçmek istiyorum.Magento addFieldToFilter izin NULL

cevap

1

Sen addFieldToFilter kullanmaya gerek yoktur.

şimdi çözüm:
adı magento code olarak bilinir niteliklerini, sadece bir dizi

 

$prodsArray=Mage::getModel('catalog/product')->getCollection() 
            ->addAttributeToFilter('custom_attribute_code') 
            ->getItems(); 
 
gibi belirli bir özelliği olan tüm ürünleri almak için aşağıdaki kodu kullanmak gerekir

ayrıca addAttributeToFilter ikinci parametresine addAttributeToFilter yılında özelliğin değerini belirli koşulları belirtebilirsiniz.

Eğer (ileri çalışma) bu dosyada bu yöntemi bulabilirsiniz: null/boş özelliklere göre bir ürün koleksiyonu Filtreleme

app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php 
+0

Teşekkür - bu işleme BOŞ fie çözümüne yol açtı lds – leepowers

+0

aslında bu yanlıştır, bu boş '' yerine bir 'null' filtresiyle bir karşılaştırma yapar. – useless

18

iki olası çözümü vardır. Magento, filtrelenecek özelliklerin değerlerini almak için bir INNER JOIN kullanır. AMA, ürün özniteliğine bir değer atanmazsa, bir veritabanı tablosu/ilişkisi eksik olduğundan birleştirme başarısız olur.

# 1 Çözüm: Kullanım addAttributeToFilter() ve "iç" (varsayılan) katılmak türünü değiştirmek "sol" için:

$collection = Mage::getModel('catalog/product')->getCollection(); 
$collection->addAttributeToFilter('custom_attribute', array(... condition options ..), 'left'); 

Çözüm # 2: özel nitelik emin olun varsayılan bir değere sahiptir. Magento bu konuda muhafazakârdır. Magento, yalnızca nitelik için bir değer verilirse, bir özellik ile ürün arasındaki ilişkiyi yaratacaktır. Yani kullanıcının belirlediği değer veya varsayılan değer yokluğunda niteliği bir ürün niteliği yönetici panelinden altında ürün detay görünümünde görünse bile filtrelemek için erişilebilir olmayacaktır.

+3

sol birleştirme stratejisi harika çalıştı. Bu cevap çok eski gibi görünüyor, ama yine de teşekkürler derim! – shaune

+1

Yakalama özelliği, IMO yakalama sırasında bir zorunluluktur. – Nick

49

Ben zaten bir çözüm buldum görüyorum, ama bu seçenek de var:

$collection->addFieldToFilter('parent_item_id', array('null' => true)); 

Ama "NULL" => false, kullanmak istiyorsanız hangi DOESNT'İŞ. (ve örneğin "in", "nin", "eq", "neq", "gt" gibi öğeleri kullanabilirsiniz fark), bunu yapabilirsiniz:

$collection->addFieldToFilter('parent_item_id', array('neq' => 'NULL')); 

Umut bu hala yararlıdır. ..

+4

Varien_Data_Collection_Db :: _ getConditionSql() kodundaki belgelere bakın. Belirtilen 'null' gibi olası tüm seçenekleri ve tersine de 'notnull'u tanımlar. – fietserwin

20

Bu DEĞİL BOŞ filtreler

$collection->addFieldToFilter('parent_item_id', array('notnull' => true)); 
1

için çalışır sorusu tam olarak sorunun başlığını uymuyor ve ben gibi bir durum arayarak onları defalarca buldum Çünkü: özel DEĞER VEYA NULL

bir DEĞERİ VEYA BOŞ eşleşen bir koleksiyon filtrelemek istiyorsanız

, o zaman kullanabilirsiniz: addFieldToFilter işaret için

$collection->addFieldToFilter('<attribute>', array(
    array('eq' => '<value>'), 
    array('null' => true) 
));