2013-02-18 162 views
3

使用Symfony2和Doctrine2,想要将CONCAT_WS和IN结合起来,而不是写很多IF。如何将CONCAT_WS与IN一起使用?

WHERE CONCAT_WS('-', id2, id2) IN ($ids) 

我收到此错误:

[Syntax Error] line 0, col 446: Error: Expected Doctrine\\ORM\\Query\\Lexer::T_IN, got '(' 

$ ID是在 '123-456' 的形式。

如果我只用一列,而不是CONCAT_WS,它的工作原理:

WHERE id2 IN ($ids) 

回答

3

并非所有的MySQL函数都可以在教义中使用。只有那些支持的所有数据库通用的功能才可用。

按照此链接查看默认功能列表http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#functions-operators-aggregates

如果您想要使用CONCAT_WS,请阅读有关在以下链接上创建自定义函数的信息。您可以创建自己的DQL自定义功能,并且可以像以前一样使用。

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/dql-user-defined-functions.html

http://symfony.com/doc/current/cookbook/doctrine/custom_dql_functions.html

+0

嗯没想到那么远。 thx的链接。 – ViszinisA 2013-02-18 22:07:19

0

我有同样的问题,因为这个问题,我解决它使用这样的:

CONCAT(CONCAT('-', id2), id2) 

不是最完美的解决方案,但它的工作原理。编写一个自定义函数是要走的路。

相关问题