Неправильное понимание построителя запросов к доктрине

Меня неправильно поняли, что построитель запросов к доктрине дает неожиданные результаты.

Первый раз я использую его для получения идентификаторов:

Из класса 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();

И получение всех записей, независимо от того, принимает они условия или нет.

Пожалуйста, помогите, может я что-то не так использую доктрину.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
59
2

Ответы 2

В 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. '%',            
    ]);

Другие вопросы по теме