Laravel: конвертировать QueryBuilder в Eloquent: ORM - PullRequest
2 голосов
/ 20 января 2020

Как вернуть с eloquent все файлы, в которых столбец deleted_at равен нулю. Я могу получить доступ к значению deleted_at следующим образом $media->model['deleted_at']

В контроллере я возвращаю $ файлы для просмотра.

$files = $media->paginate(3);

В моем вид, код ниже дает мне пустое <iframe>, если файл удален.

@foreach ($files as $media)
    @if(is_null($media->model['deleted_at']))
       @php($id = $media->model['id'])
       @php($file_name = $media->model['document_file'][0]['file_name'])
       <iframe style="width: 500px; height: 700px;" src="{{ asset("storage/$id/$file_name") }}"></iframe>
    @endif
@endforeach

С QueryBuilder я могу сделать это так, но как можно сделать то же самое с eloquent.

$file = DB::table('media')
    ->join('files', 'media.model_id', '=', 'files.id')
    ->select('model_id', 'file_name')
    ->where('deleted_at', '=',null)
    ->paginate(3);

Ответы [ 2 ]

1 голос
/ 20 января 2020

Laravel имеет пакет Scout, который имеет функцию withTrashed() для извлечения ни одного удаленного и мягко удаленного, если вы хотите только тот мусор, который вы можете использовать onlyTrashed().

$files = Media::has('files')->withTrashed()->get();

Источник: Laravel Мягкое удаление

0 голосов
/ 20 января 2020

Красноречивый запрос

$file = Media::whereHas('files', function($query) {
   $query->whereNull('deleted_at');
})->get();
...