Klasa Doctrine\ORM\EntityRepository
realizuje Doctrine\Common\Collections\Selectable
API.
Interfejs jest bardzo elastyczny i całkiem nowy, ale pozwoli na łatwe porównanie porównań i bardziej złożonych kryteriów zarówno w repozytoriach, jak i pojedynczych kolekcjach, niezależnie od tego, czy w ORM lub ODM, czy w całkowicie oddzielnych problemach.
byłoby to kryteria porównania, jak właśnie o jak w Doctrine ORM 2.3.2
:
$criteria = new \Doctrine\Common\Collections\Criteria();
$criteria->where($criteria->expr()->gt('prize', 200));
$result = $entityRepository->matching($criteria);
Główną zaletą tego rozwiązania jest to, że realizują jakiś wzór strategii tutaj i działa z repozytoriów , kolekcje, leniwe kolekcje i wszędzie wdrażany jest interfejs API Selectable
.
Pozwala to pozbyć się kilkudziesięciu specjalnych metod napisanych dla repozytoriów (takich jak findOneBySomethingWithParticularRule
), a zamiast tego skupić się na pisaniu własnych klas kryteriów, z których każdy reprezentuje jeden z tych konkretnych filtrów.
Brzydka prawda jest taka: To nie jest możliwe w Symfony, chyba że można zbudować zupełnie duże, nieczytelny, i nieintuicyjne zapytanie o niskim poziomie. I pamiętaj, to jest po prostu bardzo podstawowa rzecz, wyobraź sobie, jak masz do czynienia z bardziej złożonymi pytaniami !. ** Mogę tylko polecić wszystkim NIE używać Symfony! ** – Sliq
@ Sliq dlaczego Symfony tutaj? pochodzi z pakietu Doctrine \ ORM .... Mogę tylko polecić wszystkim, aby zrozumieli coś przed mówieniem ^^ –
Jeśli uważasz, że doktryna lub symfony nie są twoimi rzeczami, wybrałeś niewłaściwe ramy dla swojego projektu. Ramy te doskonale sprawdzają się w przypadku wielu projektów. – mask8