【问题标题】:Laravel query sqlLaravel 查询 sql
【发布时间】:2018-12-15 02:19:40
【问题描述】:

晚安。我正在尝试从数据库中取回最新且仅 1 项。但问题是同时在数据库中输入了 3 个项目。所以日期精确到秒是完全相同的。我如何获得最新的 created_at 日期和 ID >

查看我在下面给出的问题:

$latest = $newInv->where('case_number', $request-> case_number)
    ->orderBy('created_at', 'DESC')
    ->latest()->first();

我希望做什么,但仍然失败,我该如何写得更好?

$latest = $newInv->where('case_number', $request->case_number)
        ->orderBy('created_at', 'DESC')
        ->orderBy('id', 'ASC')
        ->latest()->first();

【问题讨论】:

  • 总是最新的id必须有最新的created_at日期

标签: sql laravel laravel-5 eloquent


【解决方案1】:

查询中无需添加latest()和order by id, 以下应该工作,

$latest = $newInv->where('case_number', $request->case_number)
         ->orderBy('created_at', 'DESC')->first();

文档

最新和最旧的方法可让您轻松按日期排序结果。默认情况下,结果将按 created_at 列排序。或者,您可以传递您希望排序的列名:

$user = DB::table('users')->latest()->first();

https://laravel.com/docs/5.7/queries#ordering-grouping-limit-and-offsetv查看更多信息

更新

如果您对created_at 具有相同的值,那么以下应该可以工作,

注意:您需要按 id 降序排列才能获得具有 > ID 的记录

 $latest = $newInv->where('case_number', $request->case_number)
         ->orderBy('created_at', 'DESC')
         ->orderBy('id', 'DESC')
         ->first();

【讨论】:

  • 仍然不适合我。我给了 5 条记录完全相同的 created_at 时间,直到几秒,它仍然是使用你的方法选择最新的一条。 :'(
  • @Slygoth 然后在创建后按 id 列添加订单
猜你喜欢
  • 2015-02-13
  • 2020-03-25
  • 1970-01-01
  • 2020-04-19
  • 2013-12-03
  • 2015-05-01
  • 2018-09-13
  • 2020-03-19
  • 1970-01-01
相关资源
最近更新 更多