繁体   English   中英

Laravel 从数据库中跳过和删除记录

[英]Laravel skip and delete records from Database

我正在开发一个需要记录用户最近上传的视频列表的应用程序。 重要的是,它只需要记住与用户关联的最后两个视频,因此我试图找到一种方法将最后两个记录保留在数据库中。

到目前为止,我得到的是以下内容,它正确地创建了一条新记录,但是我想删除所有比前 2 条更旧的记录,所以我得到了以下内容。

问题是这似乎删除了所有记录,尽管根据我的理解,跳过应该错过两个最近的记录,

private function saveVideoToUserProfile($userId, $thumb ...)
{
    RecentVideos::create([
        'user_id'=>$userId,
        'thumbnail'=>$thumb,
        ...
    ]);
    RecentVideos::select('id')->where('user_id', $userId)->orderBy('created_at')->skip(2)->delete();
}

谁能看到我做错了什么?

Limitoffset不适用于删除,因此您可以执行以下操作:

$ids = RecentVideos::select('id')->where('user_id', $userId)->orderByDesc('created_at')->skip(2)->take(10000)->pluck('id');
RecentVideos::whereIn('id', $ids)->delete();

首先, skip()不会跳过最近的x条记录,而是从结果集的开头跳过x条记录。 所以为了得到你想要的结果,你需要以正确的顺序对数据进行排序。 orderBy()默认为升序,但它接受第二个方向参数。 试试orderBy('created_at', 'DESC') (请参阅orderBy()上的文档。)

这就是我建议编写查询的方式。

RecentVideos::where('user_id', $userId)->orderBy('created_at', 'DESC')->skip(2)->delete();

暂无
暂无

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

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