Меня неправильно поняли, что построитель запросов к доктрине дает неожиданные результаты.
Первый раз я использую его для получения идентификаторов:
Из класса BannerRepository:
$this->createQueryBuilder('e')->select('b.id as bid')->from('AppBundle\Entity\Banner', 'b')->getQuery()->execute();
У меня шестнадцать дублированных записей, тогда как в базе всего четыре.
Хорошо, я добавил ->select('distinct(b.id) as bid'), и это решает проблему.
Но второй раз я использую предложение where для фильтрации записей по логическому типу.
$shownLast = $this->createQueryBuilder('e')->from('AppBundle\Entity\Banner', 'b')
->where('b.shownLast = 1')->getQuery()->getResult();
И получение всех записей, независимо от того, принимает они условия или нет.
Пожалуйста, помогите, может я что-то не так использую доктрину.






В BannerRepository вам не нужно использовать функцию from, потому что это уже репозиторий для Banner Entity. Первый параметр функции createQueryBuilder - это псевдоним для баннера. Используйте что-то вроде этого:
$shownLast = $this->createQueryBuilder('b')
->select('b')->where('b.shownLast = 1')
->getQuery()->getResult();
Вот пример DQL-запроса с выбором, условиями и порядком по:
$variable=$request->get('variable');
$query = $em->createQuery(
'SELECT b.id FROM App\Entity\Banner b
WHERE b.showLast = TRUE
AND
b.someField = :dinamicVariable
ORDER BY u.name ASC'
)->setParameters([
'dinamicVariable' => '%' . $variable. '%',
]);