我想检索插入到表中的最后一个文件。我知道该方法first()
存在,并为您提供表中的第一个文件,但我不知道如何获取最后一个插入。
我想检索插入到表中的最后一个文件。我知道该方法first()
存在,并为您提供表中的第一个文件,但我不知道如何获取最后一个插入。
Answers:
您需要按与现在要订购的相同字段进行订购,但要递减。例如,如果您在上传完成时有一个时间戳记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();
这将按上载时间,降序对文件表中的行进行排序,并采用第一个。这将是最新上传的文件。
orderBy
,而不是order_by
User::orderby('created_at', 'desc')->first();
orderBy('created_at', 'desc')
Files::orderBy(id', 'desc')->first();
按日期排序的工作时间更长,因为日期是字符串并且很可能没有索引。虽然主键已编入索引并且可以超快速地工作。即使created_at已建立索引,它也是已建立索引的字符串,如果是primary,则不是INT。索引字符串的性能较差。
orderBy('created_at', 'desc')
没有给您最后一行。示例:3行可以具有完全相同的TIMESTAMP值,并且orderBy('created_at', 'desc')
您将获得3行中的第一个(不一定是最后一行)
开箱即用,使用Laravel提供的最新范围。
Model::latest()->first();
这样,您就不会检索所有记录。一个更好的orderBy快捷方式。
created_at
列($timestamps = true)
,但可以随意禁用,因此如果未定义
您从未提到过您是否在使用Laravel的默认ORM Eloquent。假设您希望通过created_at获取User表的最新条目,则可以执行以下操作:
User::orderBy('created_at', 'desc')->first();
首先,它按created_at字段降序对用户排序,然后获取结果的第一条记录。
这将返回您一个User对象的实例,而不是一个集合。当然,要使用此替代方法,您必须拥有一个User模型,扩展了Eloquent类。这听起来可能有点令人困惑,但是起步确实很容易,ORM确实很有帮助。
有关更多信息,请查看功能丰富且详细的官方文档。
Laravel集合具有方法last
Model::all() -> last(); // last element
Model::all() -> last() -> pluck('name'); // extract value from name field.
这是最好的方法。
all()
方法实际上加载了所有项目。这在具有数百万条记录的表上将不起作用。
last()
返回单个Eloquent实例而不是Collection,并且调用pluck()
等于Model::all()->pluck('name')
返回,因此返回表name
中所有行的属性
要获取最后的记录详细信息,请使用以下代码:
Model::where('field', 'value')->get()->last()
在Laravel 6.x中另一种花哨的方法可以做到这一点(虽然不确定,但也必须在5.x下工作):
DB::table('your_table')->get()->last();
您也可以访问字段:
DB::table('your_table')->get()->last()->id;
get()
会对大数据集造成危险的一些解释,method将从中获取所有内容your_table
并生成Collection,并且last()
method将从该collection中获取最后一个项目。因此,您已经将表中的所有数据加载到了内存中(坏)。您应该只在后台执行`orderBy($ column,'desc')`并获取第一条记录。