Magento addFieldToFilter pozwalają null

głosy
10

Podczas korzystania z Magento Metoda zbierania addFieldToFilter jest to możliwe, aby umożliwić filtrowanie według wartości NULL? Chcę wybrać wszystkie produkty w kolekcji, które mają atrybut niestandardowy nawet jeśli wartość nie jest przypisany do atrybutu.

Utwórz 20/11/2009 o 04:20
źródło użytkownik
W innych językach...                            


5 odpowiedzi

głosy
2

Nie trzeba używać addFieldToFilter.

teraz rozwiązanie:
atrybuty nazwa znana jest jako codew Magento, wystarczy skorzystać z poniższego kodu, aby uzyskać wszystkie produkty, które mają konkretny atrybut jako tablicę


$prodsArray=Mage::getModel('catalog/product')->getCollection()
                                  ->addAttributeToFilter('custom_attribute_code')
                                  ->getItems();

można również określić pewne warunki dla wartości atrybutu w addAttributeToFilterw drugim parametrze addAttributeToFilter.

można znaleźć tę metodę w tym pliku (dalsze badania):

app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php
Odpowiedział 20/11/2009 o 22:59
źródło użytkownik

głosy
18

Filtrowanie kolekcję produktów o / null pustych atrybutów ma dwa możliwe rozwiązania. Magento korzysta z INNER JOIN aby pobrać wartości atrybutów filtrować. Ale jeśli atrybut produkt nie jest przypisana wartość sprzężenia zawiedzie, jak tabeli bazy danych / relacje brakuje.

Rozwiązanie nr 1: Zastosowanie addAttributeToFilter () i zmienić typ przyłączenia od „wewnętrznego” (domyślnie) na „lewo”:

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

Rozwiązanie 2: Upewnij się, że niestandardowy atrybut ma wartość domyślną. Magento jest konserwatywny w tym względzie. Magento stworzy tylko relację między atrybut i produktu, jeżeli wartość jest podana dla atrybutu. Tak więc w przypadku braku wartości określonej przez użytkownika lub wartość domyślną atrybutu nie będą dostępne dla filtrowania produkt nawet jeśli atrybut pojawia się w widoku szczegółami produktu w ramach panelu administratora.

Odpowiedział 21/11/2009 o 00:53
źródło użytkownik

głosy
51

Widzę, że już znalazł rozwiązanie, ale istnieje również opcja:

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

Ale jeśli chcesz korzystać z „null” => false, który nie działa. (I zauważyłem, można użyć elementów takich jak „w”, „NIN”, „korektor”, „NEQ”, „gt”), ​​można to zrobić:

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

Nadzieję, że to nadal pomocne ...

Odpowiedział 26/01/2010 o 18:12
źródło użytkownik

głosy
20

To działa na filtrach NOT NULL

$collection->addFieldToFilter('parent_item_id', array('notnull' => true));
Odpowiedział 19/03/2011 o 00:13
źródło użytkownik

głosy
2

Ponieważ pytanie nie pasuje dokładnie tytuł pytanie i znalazłem je wielokrotnie wyszukując STAN: szczególną wartość lub NULL

Jeśli chcesz filtrować kolekcji dopasowanie wartości lub null, wówczas można użyć:

$collection->addFieldToFilter('<attribute>', array(
  array('eq' => '<value>'),
  array('null' => true)
));
Odpowiedział 15/01/2018 o 16:51
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more