Как использовать CONCAT_WS вместе с IN?

Используя 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 '(' 

$ ids имеют форму «123-456».

Если я просто использую столбец вместо CONCAT_WS, он работает:

 WHERE id2 IN ($ids) 

Related of "Как использовать CONCAT_WS вместе с IN?"

Не все функции 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

У меня была такая же проблема, как и у меня, я решил это, используя это:

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

Не самое элегантное решение, но оно работает. Написание пользовательской функции – это путь.