#php #laravel
#php #laravel
Вопрос:
Я сохранил массив изображений в имени столбца базы данных images следующим образом:
'images' => [
'80011701010550.jpg',
'80011701010550_3.jpg',
'80011701010550_4.jpg'
],
Я сделал так:
$list = AppProductTemplate::select('product_templates_id','name', 'keywords', 'images')->get();
Это дает мне такой результат:
"list": [{
"product_templates_id": 1,
"name": "Daawat Brown Basmati Rice",
"keywords": "basmati Daawat rice chawal tandul tandool",
"images": [
"60011805049946.jpg"
]
}]
Я хочу получить весь список, содержащий полный URL-адрес изображения только для первого изображения. Я хочу добавить этот атрибут полного URL-адреса в список. Итак, как мне добиться этого с помощью Laravel?
Я хочу получить такой результат:
"list": [{
"product_templates_id": 1,
"name": "Daawat Brown Basmati Rice",
"keywords": "basmati Daawat rice chawal tandul tandool",
"images_full_url": "http:://localhost/images/60011805049946.jpg"
}]
Пожалуйста, помогите мне с этим.
Комментарии:
1. Вы можете использовать
mutarors
иaccessors
функциональностьeloquent
в laravel.2. Почему бы просто не добавить URL-адрес везде, где вы выводите имена изображений? Поскольку вы все равно меняете весь материал (из массива изображений в одно значение
images_full_url
), добавить туда такую логику не должно быть слишком сложно3. Проблема решена с помощью мутаторов
Ответ №1:
Вы можете использовать, как в ProductTemplate.php
модели
protected $appends = ['images_full_url'];
function getImageFullUrlAttribute()
{
$fullUrl = [];
foreach ($this->images as $image) {
array_push($fullUrl, asset('images/' . $image));
}
return $fullUrl;
}
Он добавляется images_full_url
в коллекцию
ссылка ref https://laravel.com/docs/8.x/eloquent-serialization#appending-values-to-json