как получить расширения файлов элементов массива в laravel - PullRequest
0 голосов
/ 19 октября 2019

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

pathinfo () ожидает, что параметр 1 будет строкой, задан массив.

это мой код контроллера ниже:

$news = DB::table('news')
       ->select('image')
       ->where('id', '=', 'user_id')
       ->get();


$file = $news;
$ext = pathinfo($file, PATHINFO_EXTENSION);
return view('pages.index',compact('ext'));

это мои взгляды:

@if($ext == 'mp4' || $ext == 'mov' || $ext == 'vob' || $ext == 'mpeg' || $ext == '3gp' || $ext == 'avi' || $ext == 'wmv' || $ext == 'mov' || $ext == 'amv' || $ext == 'svi' || $ext == 'flv' || $ext == 'mkv' || $ext == 'webm' || $ext == 'gif' || $ext == 'asf')
    <video width="320" height="240" controls>
        <source src="{{URL::asset('upload/news/'.$topnews->image) }}" type="video/mp4">
        Your browser does not support the video tag.
    </video>
@else
    <img src="{{ URL::asset('upload/news/'.$topnews->image) }}" class="img-responsive" alt="" width="320" height="240">
@endif

это мой маршрут:

Route::get('/', 'IndexController@index');

Ответы [ 3 ]

0 голосов
/ 19 октября 2019

возвращает первый объект из запроса и получает расширение из свойства изображения модели

$topnews = DB::table('news')
        ->select('image')
        ->where('id', '=', $user_id)
        ->first();
$ext = pathinfo($topnews->image, PATHINFO_EXTENSION);
return view('pages.index', compact('ext', 'topnews'));

Надеюсь, это поможет

Я также надеюсь, что вы не находитесь в цикле foreachв представлении:)
скрещивает пальцы

0 голосов
/ 19 октября 2019

Laravel предоставляет функцию value для получения значения непосредственно из запроса.

Измените свой запрос на

 $news = DB::table('news')
        ->select('image')
        ->where('id', '=', 'user_id')
        ->value('image');

Вы также можете опустить select, поскольку значение уже делает это

 $news = DB::table('news')
        ->where('id', '=', 'user_id')
        ->value('image');

Документация

Если ваша версия Laravel не поддерживает value, используйте first

 $news = DB::table('news')
        ->select('image')
        ->where('id', '=', 'user_id')
        ->first()->image;
0 голосов
/ 19 октября 2019

Итерируйте по вашему массиву и примените pathinfo к каждому элементу массива:

$extensions = [];
foreach ($news as $file) {
    $extensions[$file] = pathinfo($file, PATHINFO_EXTENSION);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...