public function getList(LeadFormFilterEntity $leadFormFilterEntity)
{
return new ClosureQuery(
function () use ($leadFormFilterEntity) {
$query = $this
->getQueryBuilder()
->select('COUNT(abstractLead)');
$this->applyFilter($leadFormFilterEntity, $query);
И только в applyFilter подстраиваем наш запрос под хотелки фильтра:
private function applyFilter(LeadFormFilterEntity $leadFormFilterEntity, QueryBuilder $query)
{
if ($leadFormFilterEntity->getLanding()) {
$query
->andWhere('abstractLead.landing = :landing')
->setParameter('landing', $leadFormFilterEntity->getLanding());
}
При этом форма фильтра у нас чистая. В контроллере нет ничего лишнего. Вся логика расширения DQL запроса хранится в репозитории.
Практически вся музыка из sound cloud'а.
В контроллере имеем лишь entity-фильтра, форму, пагинатор.
В репозиторий::getList передаем entity-фильтра:
В методе репозитория getList имеем следующее:
И только в applyFilter подстраиваем наш запрос под хотелки фильтра:
При этом форма фильтра у нас чистая. В контроллере нет ничего лишнего. Вся логика расширения DQL запроса хранится в репозитории.
Как-то так.
Получается встреча в 01-31 01:00:00 не попадет?