选择“表”中的“最后一行”

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

551366 次浏览

您将需要按您现在正在排序的相同字段排序,但降序。 例如,如果你有一个名为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 3和4插入的实际行,当你在一个新模型上执行savecreate操作时,如下:

$user->save();

或者,

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

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

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

你从来没有提到你是否使用Eloquent, Laravel的默认ORM。如果你是,让我们假设你想要获得一个User表的最新条目,通过created_at,你可能会这样做:

User::orderBy('created_at', 'desc')->first();

首先,它根据created_at字段逐级排序用户,然后获取结果的第一条记录。

这将返回User对象的一个实例,而不是一个集合。当然,为了使用这个替代方案,您必须有一个User模型,扩展Eloquent类。这听起来可能有点令人困惑,但它真的很容易开始,ORM真的很有帮助。

要了解更多信息,请查看官方文档,它非常丰富和详细。

Laravel集合有方法

Model::all() -> last(); // last element
Model::all() -> last() -> pluck('name'); // extract value from name field.

这是最好的办法。

获取最后的记录细节

  1. Model::all()->last();
  2. Model::orderBy('id', 'desc')->first();

获取最后一个记录id

  1. Model::all()->last()->id;
  2. Model::orderBy('id', 'desc')->first()->id;
在laravel 5.3中,上述所有内容似乎都不适合我, 所以我用

来解决我自己的问题
Model::where('user_id', '=', $user_id)->orderBy('created_at', 'desc')->get();

希望我能保释某人。

使用Laravel提供的最新范围开箱即用。

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

这样就不用检索所有的记录了。orderBy的一个更好的快捷方式。

要获得最后的记录细节,使用下面的代码:

Model::where('field', 'value')->get()->last()

试试这个:

Model::latest()->get();
如果表有日期字段,这个(User::orderBy('created_at', 'desc')->first();)是最好的解决方案,我认为。 但是没有日期字段,Model ::orderBy('id', 'desc')->first()->id;是最好的解决方案,我确信。< / p >
< p > Model::where('user_id', $user_id)->latest()->get()->first();使用 它将只返回一条记录,如果没有找到,则返回null

.

.

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

DB::table('your_table')->get()->last();

你也可以访问字段:

DB::table('your_table')->get()->last()->id;

Model($where)->get()->last()->id

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

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

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

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

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

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

laravel 8:

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

生成的sql查询:

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

select * from "timetables" order by "id" desc limit 1

老实说,这太令人沮丧了,我几乎不得不通过这里的所有答案来发现他们中的大多数都不是我想要的。事实上,我只想在浏览器中显示以下内容:

  1. 在我的表上创建的最后一行
  2. 只有一个资源

我并没有打算对一组资源进行排序,并以递减的方式排列列表,下面这行代码是我在Laravel 8项目中所使用的。

Model::latest()->limit(1)->get();

很多答案,有些我不太同意。所以我将再次总结我的评论。

如果你刚刚创建了一个新对象。 默认情况下,当你创建一个新对象时,Laravel会返回一个新对象

$lastCreatedModel = $model->create($dataArray);


dd($lastCreatedModel); // will output the new output
echo $lastCreatedModel->key; // will output the value from the last created Object

然后,有一种方法可以在没有条件的情况下将方法all()与(__abc1和first())结合起来。

非常糟糕!不要那样做!

Model::get()->last();` // the most recent entry
Model::all()->last();` // the most recent entry


Model::get()->first();` // the oldest entry
Model::all()->first();` // the oldest entry

这基本上是错误的方法!你get() all()记录,在某些情况下可能是200,000或更多,然后只挑出一行。不是很好!想象一下,你的网站从Facebook获得流量,然后是类似的查询。在一个月内,这可能意味着像巴黎这样的城市一年的二氧化碳排放量。因为服务器不得不做不必要的工作。所以忘记这种方法吧,如果你在代码中发现了它,替换它/重写它。也许你不会注意到100个数据集,但如果有1000个或更多的数据集,它就会很明显。

非常好的是:

Model::orderBy('id', 'desc')->last(); // the most recent record
Model::latest('id')->first(); // the most recent record
Model::latest('id')->limit(1)->get(); // the most recent record
Model::orderBy('id', 'desc')->limit(1)->get(); // the most recent entry
Model::orderBy('id', 'desc')->first(); // the most recent entry


Model::orderBy('id', 'asc')->first(); // the oldest entry
Model::orderBy('id', 'asc')->limit(1)->get(); // the oldest entry
Model::orderBy('id', 'asc')->first(); // the oldest entry

如果在此上下文中使用orderBy,则应始终将主键用作基,而不是create_at。

你只需要检索数据并反转它们,你就会得到你想要的记录,让我解释laravel 9的代码

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

如果你不愿意。x的最后结果

 return DB::table('files')->orderBy('upload_time', 'desc')->limit(x)->get();

你可以使用eloquent来使用这个函数:

模型::最新的()→(1)→();

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

过程

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