Использование ключевых слов в функциях уже довольно давно является проблемой, см., Например, следующую заявку: https://github.com/cakephp/cakephp/issues/10454.
Это было несколько улучшено в https://github.com/cakephp/cakephp/pull/11410,так что теперь возможно (неправильно) использовать выражение функции для DISTINCT
как своего рода обходной путь, то есть генерировать код, подобный DISTINCT(expression)
, который работает, так как круглые скобки игнорируются, так сказать, DISTINCT
это не функция!
Я не уверен, работает ли это, потому что спецификации SQL явно разрешают использовать круглые скобки, как это (также действует как замена пробела), или потому что этоэффект, так что, возможно, проверьте это, прежде чем полагаться на это!
При этом можно использовать обходной путь от связанного PR до тех пор, пока не будет добавлена реальная поддержка ключевого слова функции агрегирования, то есть сделать что-то вроде этого:
"count_abc" => $query->func()->count(
$query->func()->DISTINCT([$abc_case])
)
Это генерирует SQL, похожий на:
(COUNT(DISTINCT(CASE WHEN ... END)))