3

使用Symfony2和Doctrine2,想把CONCAT_WS和IN结合起来,而不是写很多IF。

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)
4

2 回答 2

3

并非所有 MySQL 函数都可用于 Doctrine。只有那些对所有支持的数据库通用的功能才可用。

按照此链接查看默认可用的函数列表http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#functions-operators-聚合体

如果您仍然想使用 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

于 2013-02-18T21:26:02.083 回答
0

我遇到了同样的问题,我用这个解决了它:

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

不是最优雅的解决方案,但它有效。编写自定义函数是要走的路。

于 2013-09-19T11:44:26.353 回答