我想检索插入到表中的最后一个文件。我知道方法first()存在,并为您提供表中的第一个文件,但我不知道如何获得最后一个插入。


当前回答

对于拉拉维尔 8:

Model::orderBy('id', 'desc')->withTrashed()->take(1)->first()->id

结果的sql查询:

Model::orderBy('id', 'desc')->withTrashed()->take(1)->toSql()

从“时间表”中选择*按“id”排序

其他回答

不知何故,在laravel 5.3中,上述所有内容似乎都不适用, 所以我用以下方法解决了自己的问题:

Model::where('user_id', '=', $user_id)->orderBy('created_at', 'desc')->get();

希望我能保释某人。

你可以使用Laravel提供的最新范围与你想要过滤的字段,让我们说它将按ID排序,然后:

Model::latest('id')->first();

因此,在Laravel默认情况下,你可以避免通过created_at字段进行排序。

您将需要按照您现在正在排序的相同字段进行排序,但是降序。 举个例子,如果你有一个名为upload_time的上传时间戳,你可以这样做;

Pre-Laravel 4

return DB::table('files')->order_by('upload_time', 'desc')->first();

Laravel 4及以上版本

return DB::table('files')->orderBy('upload_time', 'desc')->first();

适用于Laravel 5.7及以上版本

return DB::table('files')->latest('upload_time')->first();

这将按上传时间、降序对文件表中的行进行排序,并选择第一个。这将是最新上传的文件。

Laravel 6中另一种奇特的方法。x(不确定,但必须适用于5。X也是):

DB:表(your_table) - > () - > ();

你也可以访问字段:

DB:表(your_table) - > () - > () - > id;

请注意,如果您正在寻找顺序的或事件/有序的记录,last()、latest()是不确定的。最后/最近的记录可以具有完全相同的created_at时间戳,而您返回的是哪一个不是确定的。所以做orderBy(id|foo)->first()。欢迎其他关于如何确定的想法/建议。