Laravel:将 QueryBuilder 转换为 Eloquent:ORM

Laravel: Convert QueryBuilder to Eloquent:ORM

如何 return,使用 eloquent,所有 deleted_at 列为空的文件。我可以像这样访问 deleted_at 的值 $media->model['deleted_at']

在控制器中 I return $文件到视图。

$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);

Eloquent查询

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

Laravel 有一个 Scout 包,它有一个 withTrashed() 功能来检索 none 删除和软删除,如果你只想要垃圾,你可以使用 onlyTrashed() 功能.

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

来源:Laravel Soft delete