我找不到与使用Doctrine进行DQL查询时使用COLLATE相关的任何内容(当然它似乎不起作用).
我的具体问题:
我有一张带utf8_general_cicharset 的桌子.我有一个具有重音字符的特定字段(如'á','ű','ő'等)
一个基本的比较utf8_general_ci是无法确定常规字符和它们的重音对之间的区别(a =á,u =ű,o =ő),对于我来说,对于大多数落在那张桌子上的查询来说这是完全正常的!所以,如果我让我们说:
col1 | col2
------|-------
1 | árvíz
------|-------
2 | arviz
Run Code Online (Sandbox Code Playgroud)
此查询将返回两个结果:
SELECT * FROM `table` WHERE `col2` = 'arviz'
Run Code Online (Sandbox Code Playgroud)
同样,对于大多数用例来说,这对我来说非常好!
但是有一个特定的功能,我需要确定差异,在常规MySQL我可以使用:
SELECT * FROM `table` WHERE `col2` COLLATE utf8_bin = 'arviz'
Run Code Online (Sandbox Code Playgroud)
这仅返回非重音版本.
问题是,可以使用Doctrine的createQuery(编写dql)或查询构建器来完成这样的事情吗?
我想我已经阅读了所有相关文档,但找不到办法做到这一点.有可能吗?
我试图在DQL-s SELECT部分中使用外部参数,但由于错误它不起作用.
我在尝试什么:
$query = $this->getEntityManager()
->createQuery("
SELECT me.column_one, :param_doesnt_work param
FROM CompanyMyBundle:MyEntity me
WHERE me.column_one = :param_one
AND me.column_two = :param_two
")->setParameters(array(
'param_doesnt_work' => 'A static value',
'param_one' => 'some param',
'param_two' => 'another param',
));
Run Code Online (Sandbox Code Playgroud)
我希望得到两列,结果是'column_one'的值和Select中的param值(在这种情况下为'静态值'作为参数).
我收到以下错误:
错误:期望的IdentificationVariable | ScalarExpression | AggregateExpression | 功能声明| PartialObjectExpression | "("Subselect")"| CaseExpression,得到':param_doesnt_work'
是否有可能在那里使用参数,或者有一个完全不同的解决方案呢?找不到任何例子.