繁体   English   中英

Laravel:删除除最新 5 以外的所有内容

[英]Laravel: Delete all except latest 5

我试图使这个查询工作:

$deleteSubmissions = ViewedSubmission::where('user_id', Auth::user()->id)
    ->latest()
    ->skip(5)
    ->delete();

我想删除 auth 用户的所有 ViewedSubmissions 记录,除了最新的 5 条记录。我怎样才能做到这一点? 目前这不会删除任何内容,尽管有超过 5 条记录。

我会这样处理:

$keep = ViewedSubmission::where('user_id', Auth::user()->id)
    ->latest()
    ->take(5)
    ->pluck('id');

ViewedSubmission::where('user_id', Auth::user()->id)
    ->whereNotIn('id', $keep)
    ->delete();

编辑:您可以选择除给定数组之外的最新 5 条记录,然后删除。

$except = 5;
ViewedSubmission::where('user_id', Auth::user()->id)
    ->latest()
    ->skip($except)
    ->get()
    ->each(function($row){ $row->delete(); });

如果您与用户 id(一对多)有关系,例如viewedSubmissions命名为viewedSubmissions您可以这样做:

$except = 5;
Auth::user()->viewedSubmissions()
    ->latest()
    ->skip($except)
    ->get()
    ->each(function($row){ $row->delete(); });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM