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.

ТЕГИ:

Вы можете поделиться этой статьей в любой из соцсетей, представленных ниже:


Чтобы добавить свой комментарий, необходимо пройти аутентификацию
Комментарии
Ничего не найдено.