Как мне получить полный URL-адрес изображения из базы данных, где столбец содержит массив изображений?

#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