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


当前回答

不要使用Model::latest()->first();因为如果你的集合有多行创建在同一时间戳(这将发生在你使用数据库事务DB::beginTransaction();和DB::commit())则返回集合的第一行,显然这不是最后一行。

假设id为11、12、13的行是使用transaction创建的,那么它们都将具有相同的时间戳,因此您将通过Model::latest()->first();id: 11的行。

其他回答

对于拉拉维尔 8:

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

结果的sql查询:

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

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

如果你正在寻找你刚刚用Laravel 3和4插入的实际行,当你在一个新模型上执行保存或创建操作时,如下所示:

$user->save();

-or-

$user = User::create(array('email' => 'example@gmail.com'));

然后将返回插入的模型实例,并可用于进一步的操作,例如重定向到刚刚创建的用户的配置文件页面。

在小容量系统上查找最后插入的记录几乎可以一直工作,但如果您必须同时插入,您可能最终会查询到错误的记录。在需要更新多个表的事务系统中,这确实会成为一个问题。

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

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

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

不要使用Model::latest()->first();因为如果你的集合有多行创建在同一时间戳(这将发生在你使用数据库事务DB::beginTransaction();和DB::commit())则返回集合的第一行,显然这不是最后一行。

假设id为11、12、13的行是使用transaction创建的,那么它们都将具有相同的时间戳,因此您将通过Model::latest()->first();id: 11的行。

使用pdo,我们可以得到文档中最后插入的id PDO lastInserted

过程

use Illuminate\Support\Facades\DB;
// ...
$pdo = DB::getPdo();
$id = $pdo->lastInsertId();
echo $id;