Doctrine2的查询构建器子字符串辅助方法的正确语法

Ver*_*tex 4 symfony doctrine-orm

好吧,这个问题可能是由于我对查询构建器帮助器方法的模糊了解,但对于我的生活,我找不到使用子字符串方法的正确方法.

我试图返回以指定的字母数字值开头的所有结果.下面的代码不会抛出任何错误,但它也不会返回任何结果.我已经搜索过Google,但显然几乎没有显示如何使用子字符串.我想在查询生成器中使用它,但我可能必须使用DQL或原始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')
        );
Run Code Online (Sandbox Code Playgroud)

谢谢!

web*_*ave 7

SUBSTRING需要基于一个.

MySQL手册状态:

对于所有形式的SUBSTRING(),将从中提取子字符串的字符串中的第一个字符的位置计为1.

使用Oracle:

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

Substring
---------
CDEF
Run Code Online (Sandbox Code Playgroud)

Transact-SQL手册:

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

您可以从这些示例中看到它们也使用了一个基础(但是,Oracle会1在给定时使用0).

只需将substring参数更改为't.sortTitle', 1, 1,它就能正常工作.