我试图让这个查询起作用:
$deleteSubmissions = ViewedSubmission::where('user_id', Auth::user()->id)
->latest()
->skip(5)
->delete();
我希望删除掉所有认证用户的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();
$except = 5;
ViewedSubmission::where('user_id', Auth::user()->id)
->latest()
->skip($except)
->get()
->each(function($row){ $row->delete(); });
如果你有一个与用户ID相关的关系(一对多),例如名为 viewedSubmissions
,可以这样做:
$except = 5;
Auth::user()->viewedSubmissions()
->latest()
->skip($except)
->get()
->each(function($row){ $row->delete(); });
latest()
的作用吗?我猜它是一个范围 - 它是按created_at
排序的吗? - ceejayoz