Я пытаюсь отобразить 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]);
}
Любая помощь будет оценена по достоинству!






вместо того, чтобы делать это на уровне db, вы можете сделать следующее в своей модели Post
public function getImageUrlAttribute($value)
{
return 'http://localhost:8000/'.$this->image;
}
и получить доступ к нему как $post->image_url
я не вижу тире в ответе, извините, не понимаю, что вы имеете в виду @Hervera
это не проблема с БД, ваш код выше должен работать нормально. вы могли бы просто сделать return $posts, и я считаю, что laravel позаботится о флаге JSON_UNESCAPE_SLASHES за вас. ваша проблема в том, что php ускользает от вашего ответа json.
да, я видел, что вы его обновили. json экранирован, просто добавьте флаг, указанный выше
Я делаю это, как вы сказали, return $ posts; но возникает та же проблема, laravel не избегает флага JSON_UNESCAPE_SLASHES. Это новый ответ [{"imageurl": "http: \ / \ / localhost: 8000 \ / images \ /1509695371.jpg"}, {"imageurl": "http: \ / \ / localhost: 8000 \ / images \ /1509695156.jpg "}]
вы можете сделать следующее: `$ posts = json_encode (Post :: select (array (DB :: raw (" CONCAT ('localhost: 80 00 / изображений', image) AS imageurl "))) -> get (), JSON_UNESCAPED_SLASHES);
Большое спасибо @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; }
с удовольствием предлагаю создать ответ с решением и опубликовать его здесь
Спасибо, позвольте мне помочь другим.
Большое спасибо @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;
}
Спасибо, Сари, но ваш ответ не решает проблему. Я хотел бы знать, как хорошо объединить, не получая этих дополнительных тире, или чтобы получить полный URL-адрес, прикрепленный к имени файла изображения, которое я получаю