Вывод из бд json laravel
Подскажите, у меня есть таблица в БД с колонкой tags, где написан {"tags":[игры, купить, показать]}. Как мне вывести в blade шаблоне теги в нормальном виде
<a class="btn btn-tag" href="">игры</a>
<a class="btn btn-tag" href="">купить</a>
<a class="btn btn-tag" href="">показать</a>
$services = DB::table('services')
->orderBy('id','ASC')
->where('services.id_user', '=', Auth::user()->id)
->leftJoin('users', 'services.id_user', '=', 'users.id')
->leftJoin('category', 'services.id_category', '=', 'category.id')
->select('services.*', 'users.id as user_id', 'category.id as cat_id', 'category.title as cat_title')
->get();
return view('pages/profile/services', ['services' => $services]);
Ответы (2 шт):
кхм, пусть будет ответ новичка в laravel, ибо я еще введение не прочитал даже.
в любом случае (не говоря о целесообразности хранения кодированных данных) вам потребуется их декодировать. Собственно для этого у вас есть три места, где это можно сделать.
Раз речь про представление, то прямо там
@foreach(json_decode($service->tags) as $tag)
<a href="#">{{ $tag }} </a>
@endforeach
второе - предобработка данных в контроллере. Получили список, пробежались, декодировали и передали готовое в шаблон.
И третье, наиболее, наверное, адекватное - перекрыть существующее или добавить новое свойство модели
class Service extends Model {
public function getTagsAttribute($value){
return json_decode($value);
}
public function getTagsListAttribute(){
return json_decode($this->tags);
}
}
Для решения вашей проблемы используются мутаторы. Данный раздел документации с указанием что и в какие данные можно преобразовывать В данном случае для преобразования json в array колонки tags, модели service, нужно указать следующее:
class Service extends Model
{
...
protected $casts = [
'tags' => 'array'
];
}
Далее отправляется на фронт и перебираете.