Car*_*ñol 126 laravel eloquent
我想检索插入到我的表中的最后一个文件.我知道该方法first()存在并为您提供表中的第一个文件,但我不知道如何获取最后一个插入.
Joa*_*son 176
您需要按照现在订购的相同字段进行订购,但需要降序.举个例子,如果你在上传完成时有一个时间戳upload_time,你就会做这样的事情.
对于Pre-Laravel 4
return DB::table('files')->order_by('upload_time', 'desc')->first();
Run Code Online (Sandbox Code Playgroud)
对于Laravel 4及以后
return DB::table('files')->orderBy('upload_time', 'desc')->first();
Run Code Online (Sandbox Code Playgroud)
这将按上传时间,降序排序文件表中的行,然后取第一个.这将是最新上传的文件.
小智 87
使用Laravel提供的最新范围.
Model::latest()->first();
Run Code Online (Sandbox Code Playgroud)
这样你就不会检索所有记录.orderBy的更好的快捷方式.
Lui*_*ese 73
您从未提及是否使用Eloquent,Laravel的默认ORM.如果你是,假设你想通过created_at得到User表的最新条目,你可能会这样做:
User::orderBy('created_at', 'desc')->first();
Run Code Online (Sandbox Code Playgroud)
首先,它按create_at字段对用户进行降序排序,然后获取结果的第一条记录.
这将返回User对象的实例,而不是集合.当然,要使用这个替代方案,你必须有一个User模型,扩展Eloquent类.这可能听起来有点令人困惑,但它很容易上手,而且ORM真的很有帮助.
有关更多信息,请查看非常丰富且详细的官方文档.
Mai*_*rey 42
很多答案,有些我不太同意。所以我会再次总结我的评论。
\n如果您刚刚创建了一个新对象。\n默认情况下,当您创建一个新对象时,Laravel 返回新对象。
\n$lastCreatedModel = $model->create($dataArray); \n\ndd($lastCreatedModel); // will output the new output\necho $lastCreatedModel->key; // will output the value from the last created Object\nRun Code Online (Sandbox Code Playgroud)\n然后是不带条件地将方法all()与 (last()和)组合起来的方法。first()
$lastCreatedModel = $model->create($dataArray); \n\ndd($lastCreatedModel); // will output the new output\necho $lastCreatedModel->key; // will output the value from the last created Object\nRun Code Online (Sandbox Code Playgroud)\n这基本上是错误的做法!您get() all()记录的记录(在某些情况下可能有 200,000 条或更多),然后只挑选一行。不好!想象一下,您的网站从 Facebook 获取流量,然后收到类似的查询。一个月的时间可能意味着像巴黎这样的城市一年的 CO\xc2\xb2 排放量。因为服务器必须进行不必要的辛苦工作。因此,请忘记这种方法,如果您在代码中找到它,请替换/重写它。也许您在 100 个数据集时不会注意到它,但在 1000 个或更多数据集时,它可能会很明显。
Model::get()->last();` // the most recent entry\nModel::all()->last();` // the most recent entry\n\nModel::get()->first();` // the oldest entry\nModel::all()->first();` // the oldest entry\nRun Code Online (Sandbox Code Playgroud)\n如果在此上下文中使用 orderBy,则应始终使用主键而不是 create_at 作为基础。
\nmda*_*mia 13
Laravel系列最后有方法
Model::all() -> last(); // last element
Model::all() -> last() -> pluck('name'); // extract value from name field.
Run Code Online (Sandbox Code Playgroud)
这是最好的方法.
小智 9
您可以将 Laravel 提供的最新范围与您要过滤的字段一起使用,假设它将按 ID 排序,然后:
Model::latest('id')->first();
Run Code Online (Sandbox Code Playgroud)
因此,通过这种方式,您可以避免created_at在 Laravel 中默认按字段排序。
不要使用Model::latest()->first();,因为如果您的集合在同一时间戳创建了多行(当您使用数据库事务DB::beginTransaction();和时会发生这种情况DB::commit()),那么将返回集合的第一行,显然这不会是最后一行。
假设 id 为 11、12、13 的行是使用事务创建的,那么它们都将具有相同的时间戳,因此您将得到的Model::latest()->first();是 id 为 11 的行。
小智 5
要获取最后一条记录的详细信息,请使用以下代码:
Model::where('field', 'value')->get()->last()
Run Code Online (Sandbox Code Playgroud)