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

时间:2011-12-23 18:28:15

标签: 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')
        );

谢谢!

1 个答案:

答案 0 :(得分:7)

SUBSTRING需要基于一个。

MySQL manual州:

  

对于所有形式的SUBSTRING(),第一个字符的位置   从中提取子字符串的字符串被认为是   1。

使用Oracle

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

Substring
---------
CDEF

来自Transact-SQL manual

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

您可以从这些示例中看到,他们也在使用基于单一的(但是,在给定1时,Oracle会假设为0。)

只需将substring参数更改为't.sortTitle', 1, 1即可正常使用。