Считай меня новичком в laravel
Цель такова: у меня есть два столбца, теперь мне нужно, id
чтобы перед ними стоял префикс той component name
же строки в таблице.
Например (работает)... У меня есть Mysql, например
SELECT CONCAT(components.name," ", components.id) AS ID
FROM `components`
И выход
Я БЫ
|TestComp 40 |
-------------
|component 41 |
-------------
|test 42 |
Мне нужно то же самое в красноречивом стиле laravel, так как здесь компонент - это имя модели. Итак, я попробовал что-то вроде
$comp=Component::select("CONCAT('name','id') AS ID")->get()
но это не работает.
Я думаю, потому что синтаксис неверен.
Пожалуйста, помогите мне с правильным синтаксисом. Использование laravel
Models
.
Примечание. Я сделал вышеуказанный запрос, ссылаясь на то, что он доступен в Интернете.
User::select(DB::raw('CONCAT(last_name, first_name) AS full_name'))
Решение проблемы
Вам нужно обернуть ваш запрос в DB::raw
:
$comp = Component::select(DB::raw("CONCAT('name','id') AS ID"))->get()
Кроме того, обратите внимание, что поскольку вы выполняете свой запрос таким образом, ваша модель может вести себя по-другому, поскольку этот выбор удаляет все другие поля из оператора выбора. Таким образом, вы не можете прочитать другие поля из своей модели без нового запроса. Так что используйте это ТОЛЬКО для ЧТЕНИЯ данных, а не для ИЗМЕНЕНИЯ данных.
Кроме того, чтобы сделать его хорошим списком, я предлагаю вам изменить свой запрос на:
$comp = Component::select(DB::raw("CONCAT('name','id') AS display_name"),'id')->get()->pluck('display_name','id');
// dump output to see how it looks.
dd($comp);// array key should be the arrray index, the value the concatted value.
Комментариев нет:
Отправить комментарий