2012-02-22 14 views
7

wykorzystaniem modeli kolekcji Magentos, jak powinny przejść o dodanie zapytania w niepełnym/filtr taki jak ten:Magento kolekcja - filtr przez kilka pól

WHERE (main_table.x < 1 OR (main_table.x - main_table.y) >= 5) 

Aktualizacja Jestem teraz działa w ten sposób:

$this->getSelect() 
    ->where('main_table.x < 1') 
    ->orWhere('(main_table.x - main_table.y) >= :qty'); 
$this->addBindParam(':qty', $qty); 

Wynik:

SELECT ... WHERE ... AND ... AND (main_table.x < 1) OR ((main_table.x - main_table.y) >= :qty) ORDER BY ... 

Kwestia jest taka, że ​​nie może wydawać się dostać do związania $qty do :qty

Aktualizacja 2 skończyło się z tego, bo potrzebował OR w nawiasach

$this->getSelect()->where('(main_table.x < 1 OR (main_table.x - main_table.y) >= ?)', $qty); 
+0

Zaktualizowałem wpis – Vitamin

Odpowiedz

6

Podczas korzystania z getSelect Metoda omijająca interfejs kolekcji modeli Magento. Czasami jest to jedyny sposób, aby uzyskać dokładnie wybrane zapytanie, ale pamiętaj, że może nie żelować w 100% za pomocą interfejsu modelu Magento.

Podczas korzystania z metody bindParamater używasz interfejsu modelu Magento. Nie mogę mówić do dlaczego to nie działa, ale podejrzewam, że obiekt Zend select i obiekty kolekcji modelu Magento wiążą swoje parametry w różnym czasie i w inny sposób. Aby uzyskać pożądane wyniki, pomiń metodę bindParamater i użyj prostszej metody zmiany parametru ? metody orWhere.

$this->getSelect() 
    ->where('main_table.x < 1') 
    ->orWhere('(main_table.x - main_table.y) >= ?',$qty); 
+0

Działa to doskonale, dzięki! – Vitamin

3

Blockquote Kwestia jest taka, że ​​nie może się dostać do związania $ st do: Ilość

No to faktycznie nie problem to silnik/MySQL sposób PDO pracuje z przygotowanie instrukcji zapytania i parametry wiązania - które są wysyłane osobno - i wykonanie zapytania później.

Więc to nie jest na warstwie abstrakcji DB do generowania ostatecznego instrukcję zapytania jeśli używasz Bind Parametry

Zobacz ten stackoverflow question i PDO manual.

+1

Więc mówisz, że to działa, po prostu drukuję kwerendę, zanim zostanie wykonana, a tym samym uzyskać mylące wyniki? – Vitamin

+0

Tak, nie zobaczysz ciągu zapytania z interpolacją, które oczywiście może drażnić. W przypadku podwójnego sprawdzania zmniejsz zapytanie o kolekcję za pomocą sku lub identyfikatora produktu z parametrem powiązania. – ngocanhdoan

Powiązane problemy