Laravel - Как объединить URL и получить изображения из базы данных в формате json

Я пытаюсь отобразить json-массив изображений, хранящихся в базе данных, чтобы получить полный URL-адрес в Laravel. Я использую функцию CONCAT() для объединения полного URL-адреса изображения, но получаю ложный URL-адрес с множеством тире внутри. Это проблема в следующем выводе:

{
  "posts": [{
    "imageurl": "http://localhost:8000/images/1509695371.jpg"
  }, {
    "imageurl": "http://localhost:8000/images/1509695156.jpg"
  }, {
    "imageurl": "http://localhost:8000/images/1509696465.jpg"
  }, {
    "imageurl": "http://localhost:8000/images/1509697249.jpg"
  }]
}

И это функция в моем контроллере для извлечения изображений, хранящихся в базе данных, из таблицы Post:

public function index()
{
    $posts = Post::select(array(DB::raw("CONCAT('http://localhost:8000/images/', image) AS imageurl")))->get();
    return response()->json(['posts' =>  $posts]);
}

Любая помощь будет оценена по достоинству!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
1 706
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вместо того, чтобы делать это на уровне db, вы можете сделать следующее в своей модели Post

 public function getImageUrlAttribute($value)
    {
        return 'http://localhost:8000/'.$this->image;
    }

и получить доступ к нему как $post->image_url

Спасибо, Сари, но ваш ответ не решает проблему. Я хотел бы знать, как хорошо объединить, не получая этих дополнительных тире, или чтобы получить полный URL-адрес, прикрепленный к имени файла изображения, которое я получаю

Hervera 20.03.2018 17:57

я не вижу тире в ответе, извините, не понимаю, что вы имеете в виду @Hervera

Sari Yono 20.03.2018 17:58

это не проблема с БД, ваш код выше должен работать нормально. вы могли бы просто сделать return $posts, и я считаю, что laravel позаботится о флаге JSON_UNESCAPE_SLASHES за вас. ваша проблема в том, что php ускользает от вашего ответа json.

Sari Yono 20.03.2018 18:16

да, я видел, что вы его обновили. json экранирован, просто добавьте флаг, указанный выше

Sari Yono 20.03.2018 18:19

Я делаю это, как вы сказали, return $ posts; но возникает та же проблема, laravel не избегает флага JSON_UNESCAPE_SLASHES. Это новый ответ [{"imageurl": "http: \ / \ / localhost: 8000 \ / images \ /1509695371.jpg"}, {"imageurl": "http: \ / \ / localhost: 8000 \ / images \ /1509695156.jpg "}]

Hervera 20.03.2018 18:23

вы можете сделать следующее: `$ posts = json_encode (Post :: select (array (DB :: raw (" CONCAT ('localhost: 80‌ 00 / изображений', image) AS imageurl "))) -> get (), JSON_UNESCAPED_SLASHES);

Sari Yono 20.03.2018 18:24

Большое спасибо @Sari Теперь все работает нормально. После смены кодов на этот public function index() { $posts = json_encode(Post::select(array(DB::raw("CONCAT('http://local‌​host:8000/images/', image) AS imageurl")))->get(), JSON_UNESCAPED_SLASHES); return $posts; }

Hervera 20.03.2018 18:32

с удовольствием предлагаю создать ответ с решением и опубликовать его здесь

Sari Yono 20.03.2018 18:36

Спасибо, позвольте мне помочь другим.

Hervera 20.03.2018 18:39
Ответ принят как подходящий

Большое спасибо @Sari Теперь все работает нормально. После изменения кодов на этот,

public function index()
{
  $posts =  json_encode(Post::select(array(DB::raw("CONCAT('http://localhost:8000/images/', image) AS imageurl")))->get(), JSON_UNESCAPED_SLASHES);

   return $posts;
}

Другие вопросы по теме