Неправильно понял конструктор запросов доктрины - PullRequest
0 голосов
/ 20 декабря 2018

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

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

Из класса BannerRepository:

$this->createQueryBuilder('e')->select('b.id as bid')->from('AppBundle\Entity\Banner', 'b')->getQuery()->execute();

I 'м получить шестнадцать дублированных записей, когда в базе данных только четыре.Хорошо, я добавил ->select('distinct(b.id) as bid'), и это решает проблему.

Но второй раз я использую условие where для фильтрации записей по логическим значениям.

$shownLast = $this->createQueryBuilder('e')->from('AppBundle\Entity\Banner', 'b')
->where('b.shownLast = 1')->getQuery()->getResult();

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

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

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Существует пример запроса 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. '%',            
    ]);
0 голосов
/ 20 декабря 2018

В BannerRepository вам не нужно использовать функцию from, потому что это уже репозиторий для Banner Entity.Первый параметр для функции createQueryBuilder - это псевдоним для Banner.Используйте что-то вроде этого:

$shownLast = $this->createQueryBuilder('b')
->select('b')->where('b.shownLast = 1')
->getQuery()->getResult();
...