2013-02-18 120 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) 

不是最完美的解決方案,但它的工作原理。編寫一個自定義函數是要走的路。

相關問題