使用Laravel获取最新行?

时间:2018-09-15 23:03:14

标签: laravel laravel-5 eloquent

当行实际上具有相同的created_at值时,似乎没有获得最新行。

使用$model->latest()->first()-我得到的是created_at的第一行而不是最后一行。

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

这将完全取决于表中还有哪些其他数据。关系数据库的任何查询都不会考虑“物理位置”-也就是说,在您能够检查表中的某些值之前,无法获得表的“最后插入的行”表示它是可能的最后一行。

执行此操作的常用方法之一是在数据库中具有自动递增的唯一键(通常是主键),您可以简单地在该集中获得最大值。 不能保证是插入的最后一行,但是对于大多数应用程序,通常是这样。

您需要执行的等效查询

SELECT * FROM Table WHERE created_at = ? ORDER BY ID DESC LIMIT 1

或者,在雄辩的ORM中

$model->where('created_at', '=', ?)->orderBy('id', 'desc')->take(1)->first();

请记住,您可能需要其他过滤器,因为其他用户或进程完全有可能在同一时间插入记录以生成相同的创建日期,并且最终还会得到其他人的记录。

答案 1 :(得分:2)

latest()将默认使用created_at列。

如果所有created_at值都完全相同,那么这显然将不起作用...

您可以将列名传递给latest(),以告诉它按该列排序。

您可以尝试:

$model->latest('id')->first();

这假设您有一个递增的id列。