Yii2 Active Record: ошибка при использовании CONCAT в SELECT
Если понадобилось конкатенировать какие-то колонки в select-запроса в Active Record, то скорее всего вы сделали это так:
$quotes = ActiveRecord::find()->select("id, CONCAT(`name`, ' model id: ' ,id) as name")->all();
И в результате выполнения получили следующую ошибку:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM `quote`' at line 1 The SQL being executed was: SELECT `id`, CONCAT(`name`, `' model id: '
Ошибка связана с тем, что выбираемые колонки перечислены в строке одним параметром. Согласно официальной документации для указания нескольких колонок для выбора необходимо имена столбцов перечислять через массив:
Besides column names, you can also select DB expressions. You must use the array format when selecting a DB expression that contains commas to avoid incorrect automatic name quoting. For example
$query->select(["CONCAT(first_name, ' ', last_name) AS full_name", 'email']);
В нашем случае необходимо поступить следующим образом:
$quotes = ActiveRecord::find()->select(['id', new \yii\db\Expression("CONCAT(`name`, ' model id: ', `id`) as name")])->all();
Вот такой простой пример, но довольно часто именно здесь возникает боль.
Теперь вы научились использовать MySQL CONCAT в Active Record Yii2.
ТЕГИ: Yii2