Правильный синтаксис для вспомогательного метода подстроки построителя запросов Doctrine2 - PullRequest
4 голосов
/ 23 декабря 2011

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

Я пытаюсь вернуть все результаты, которые начинаются с указанного буквенно-цифрового значения. Приведенный ниже код не выдает никаких ошибок, но также не возвращает никаких результатов. Я искал Google, но, видимо, почти ничего не показывает, как использовать подстроку. Я хотел бы, чтобы это работало в построителе запросов, но мне, возможно, придется перейти на DQL или raw sql.

    $qb->select('p', 't');
    $qb->from('ContentParent', 'p');
    $qb->join('p.titleCurrent', 't');
    $qb->where(
            $qb->expr()->eq($qb->expr()->substring('t.sortTitle', 0, 1), ':letter')
        );

Спасибо!

1 Ответ

7 голосов
/ 23 декабря 2011

SUBSTRING должен основываться на одном.

В руководстве MySQL указано:

Для всех форм SUBSTRING () позиция первогосимвол в строке, из которой должна быть извлечена подстрока, считается как 1.

С Oracle :

SELECT SUBSTR('ABCDEFG',3,4) "Substring"
     FROM DUAL;

Substring
---------
CDEF

Из транзакции -SQL manual :

SELECT LastName, SUBSTRING(FirstName, 1, 1) AS Initial
FROM Person.Person
WHERE LastName like 'Barl%'
ORDER BY LastName

Из этих примеров видно, что они тоже используют однопользовательский режим (однако, Oracle примет 1 при получении 0).

Просто измените параметры substring на 't.sortTitle', 1, 1, и все будет работать правильно.

...