Szukaj…


Parametry

Parametr Detale
$ addFieldToFilter ( $ field , $ condition = null) {string} Pole, które dodajemy do filtra.
$ addFieldToFilter ($ field, $ condition = null ) {mixed} Definicja filtra, którego będziemy używać.
addAttributeToFilter ( $ attr , $ condition = null, $ join = 'inner') {string} Pole, które dodajemy do filtra.
addAttributeToFilter ($ attr, $ condition = null , $ join = 'inner') {mixed} Definicja filtra, którego będziemy używać.
addAttributeToFilter ($ attr, $ condition = null, $ join = 'inner' ) {(„wewnętrzny”, „lewy”)} Typ łączyć sql używany podczas dołączania do tabeli EAV.

Uwagi

Filtruj argumenty porównania

Magento oferuje również elastyczny sposób filtrowania przy użyciu operatorów porównania. Oto lista poprawnych operatorów i ich składni:

Wszystkie argumenty porównawcze można przekazać do drugiego parametru metod addFieldToFielter() lub addAttributeToFilter() .

$collection_of_products->addAttributeToFilter('visible',array("eq"=>1));
Porównanie Tablica argumentów Wynikowy fragment kodu SQL
Równa się tablica („eq” => $ var) GDZIE (`my_field` = $ var)
Nie równe tablica („neq” => $ var) GDZIE (`my_field`! = $ Var)
Lubić tablica („jak” => $ var) GDZIE (`my_field` LIKE $ var)
Nie jak tablica („nlike” => $ var) GDZIE (`my_field` NIE LUBI $ var)
Jest tablica („is” => $ var) GDZIE (`my_field` IS $ var)
W tablica („w” => $ var) GDZIE (`my_field` IN ($ var))
Nie w tablica („nin” => $ var) GDZIE (`my_field` NOT IN ($ var))
Zero tablica („null” => true) GDZIE („moje_pole” JEST NULL)
Nie jest zerem tablica („notnull” => true) GDZIE („moje_pole” NIE JEST NULL)
Lepszy niż array ("gt" => $ var) GDZIE (`my_field`> $ var)
Mniej niż tablica („lt” => $ var) GDZIE (`my_field` <$ var)
Większy bądź równy tablica („gteq” => $ var) GDZIE (`my_field`> = $ var)
Mniej niż lub równy tablica („lteq” => $ var) GDZIE (`my_field` <= $ var)
Znajdź w zestawie array ("finset" => array ($ var)) GDZIE (find_in_set ($ var, `my_field`)
Od i do tablica („od” => $ var1, „do” => $ var2) GDZIE (`my_field`> = $ var1 ORAZ` my_field` <= $ var2)

Filtrowanie kolekcji

Magento ma potężny zestaw metod do filtrowania kolekcji. Ponieważ istnieją dwa typy obiektów, które mogą być zawarte w kolekcjach, musimy najpierw ustalić, z jakim typem danych pracujemy, zanim będziemy mogli je filtrować. Magento wdraża model danych EAV dla podmiotów, takich jak produkty i kategorie. Istnieje inny zestaw metod, których należy użyć, jeśli filtrujemy kolekcję obiektów EAV.

W Magento Zamówienia nie są przechowywane jako Obiekty EAV. To sprawia, że kolekcja zamówień jest dobrym przykładem filtrowania kolekcji podstawowej.

$collection_of_orders = Mage::getModel('sales/order')->getCollection();
$collection_of_orders->addFieldToFilter('status','processing');

Jeśli spojrzymy na kolekcję produktów, zobaczymy, że są one przechowywane w modelu danych EAV. Możemy również łatwo filtrować według atrybutów EAV.

$collection_of_products = Mage::getModel('catalog/product')->getCollection();
$collection_of_products->addAttributeToFilter('visible',1);

Obsługa AND i OR w filtrach

Kiedy przeszukujemy nasze dane, często potrzebujemy więcej niż jednego filtra, aby uzyskać dokładnie taki zestaw danych, którego szukamy. W SQL obsługujemy to za pomocą klauzul AND i OR. To samo możemy osiągnąć dzięki kolekcjom.

Aby dodać do zapytania klauzulę AND, wystarczy dodać kolejne wywołanie metody. To doda drugi filtr do oryginalnej instrukcji WHERE, łącząc ją z AND.

Mage::getModel('catalog/product')->getCollection()
        ->addFieldToFilter('sku',array('like'=>'a%'))
        ->addFieldToFilter('sku',array('like'=>'%b'));

Wynikowa klauzula WHERE będzie wyglądać następująco:

WHERE (e.sku like 'a%') AND (e.sku like '%b')

Powiedzmy teraz, że chcemy wszystkich skusów, które zaczynają się na „a” LUB kończą na „b”. Jak dodać klauzulę OR? Dzięki kolekcjom Magento jest to całkiem proste. Dodajemy filtr jako drugi element w tablicy filtrów.

Mage::getModel('catalog/product')->getCollection()
        ->addFieldToFilter('sku', array(
            array('like'=>'a%'), 
            array('like'=>'%b')
        ));

Teraz wynikowa klauzula WHERE będzie wyglądać następująco:

WHERE (((e.sku like 'a%') or (e.sku like '%b'))) 


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow