【问题标题】:Laravel: Convert QueryBuilder to Eloquent:ORMLaravel:将 QueryBuilder 转换为 Eloquent:ORM
【发布时间】:2020-05-06 06:39:12
【问题描述】:

如何以 eloquent 的方式返回 deleted_at 列为空的所有文件。我可以像这样访问deleted_at 的值$media->model['deleted_at']

在控制器中,我将 $files 返回到视图。

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

【问题讨论】:

  • 你定义媒体和文件模型的关系了吗?

标签: php laravel eloquent laravel-query-builder


【解决方案1】:

Laravel 有一个 Scout 包,它有一个 withTrashed() 函数来检索未删除和软删除,如果你只想要删除的,你可以使用 onlyTrashed() 函数。

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

来源:Laravel Soft delete

【讨论】:

    【解决方案2】:

    雄辩的查询

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-16
      • 2019-11-11
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多