好吧,这个问题可能是由于我对查询构建器辅助方法的模糊理解,但在我的生活中,我找不到使用 substring 方法的正确方法。
我试图返回以指定字母数字值开头的所有结果。下面的代码不会抛出任何错误,但也不会返回任何结果。我已经搜索过谷歌,但显然几乎没有任何内容显示如何使用子字符串。我想让它在查询构建器中工作,但我可能必须使用 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')
);
谢谢!
最佳答案
SUBSTRING 需要基于一个。
MySQL manual状态:
For all forms of SUBSTRING(), the position of the first character in the string from which the substring is to be extracted is reckoned as 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
您可以从这些示例中看到,它们也使用基于一个的(然而,Oracle 将假定
1
当给定 0
时)。只需更改您的
substring
't.sortTitle', 1, 1
的参数它会正常工作。
关于symfony - Doctrine2 的查询构建器子字符串辅助方法的正确语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8619421/