Построитель запросов Doctrine 2 с установленными параметрами не работает - PullRequest
1 голос
/ 21 июля 2011

это мой запрос:

открытая функция getDetails ($ userid, $ orderby, $ sort) {

$query = $this->_em->createQueryBuilder()
                ->select('u')
                ->from('\Entities\Users', 'u')
                ->where('u.userid= ?1')
                ->orderBy('u.?3', '?3')
                ->setParameter(1, $userid)
                ->setParameter(2, $orderby)
                ->setParameter(3, $sort)
                ->getQuery()
                ->getResult();

}

продолжает выдавать ошибку: Сообщение: [Семантическая ошибка] строка 0,col 83 возле '? 3 DESC': Ошибка: '? 3' не определена.

как мне получить запрос из свойств этой функции на запрос?

Ответы [ 2 ]

3 голосов
/ 22 июля 2011

Нельзя использовать заполнители для динамической сборки DQL-запроса.Вам придется кодировать его самостоятельно:

$sortBy = in_array($sortBy, array(...)) ? $sortBy : 'id';
$sortDir = $sortDir == 'ASC' ? 'ASC' : 'DESC';

$this->em->createQueryBuilder()
    ...
    ->orderBy('u.' . $sortBy, $sortDir)
1 голос
/ 30 июля 2014

Невозможно связать параметры с QueryBuilder, только с Query, поэтому просто поменяйте местами строки, сначала получите запрос из компоновщика, затем заполните его параметрами и получите результат.

$query = $this->_em->createQueryBuilder()
            ->select('u')
            ->from('\Entities\Users', 'u')
            ->where('u.userid= ?1')
            ->orderBy('u.?3', '?3')
            ->orderBy('u.'.$orderBy, $sort)
            ->getQuery()
            ->setParameter(1, $userid)
            ->getResult();

}

В доктрине 2.4 это исправлено, и вы можете привязать параметры к QueryBuilder.

Обновление: я пропустил момент с заполнителем в имени поля, SQL не поддерживает такие конструкции.

...