Powinieneś być w stanie połączyć większość tych technik, aby utworzyć zapytanie, które chcesz. W przypadku tabel sprzedaży prawdopodobnie użyjesz addFieldToFilter
- ale Zend_Db_Expr
jest to prawdopodobnie ścieżka najmniejszego oporu dla Ciebie:
addAttributeToFilter:
Według Wiki Magento : Podczas tworzenia nawiasów zawierających OR
warunki możesz wykonać następujące czynności:
Jeśli tablica zostanie przekazana, ale nie określono kodu atrybutu, zostanie zinterpretowana jako grupa warunków LUB, które będą przetwarzane w ten sam sposób.
Na podstawie tego możemy skonstruować następujące elementy:
$collection->addAttributeToFilter(
array(
array('attribute'=> 'someattribute','like' => 'value'),
array('attribute'=> 'otherattribute','like' => 'value'),
array('attribute'=> 'anotherattribute','like' => 'value'),
)
);
Spowoduje to wyświetlenie WHERE
zdania o formacie:
WHERE ((someattribute LIKE 'value') OR (otherattribute LIKE 'value') OR (anotherattribute LIKE 'value'))
addFieldToFilter:
W przypadku, gdy model jest bezpośrednio połączony z tabelą DB, do zastosowania warunków warunkowych w kolumnie bazy danych według nazwy wymagane są:
$collection->addFieldToFilter(
array('title', 'content'),
array(
array('like'=>'%$titlesearchtext%'),
array('like'=>'%$contentsearchtext%')
)
)
Zend_Db_Expr:
W przypadku znacznie bardziej skomplikowanych konstrukcji możesz zbudować własną, używając klauzuli where Zend_Db_Expr
. Na przykład :
$collection->getSelect()->where(new Zend_Db_Expr("(e.created_at > '2013-01-01 00:00:00' OR e.created_at <'2012-01-01 00:00:00)"));
Źródło :
/programming/5301231/addattributetofilter-and-or-condition-in-magentos-collection
/programming/3826474/magento-addfieldtofilter-two-fields-match-as-or-not-and/7851884#7851884