【问题标题】:Laravel 5.5 get multiple records which are recently updatedLaravel 5.5 获取最近更新的多条记录
【发布时间】:2018-08-02 01:37:25
【问题描述】:

我正在显示最近更改的多条记录。在之前的视图中有一个按钮,当我单击时,所有记录的 kitchen_status 从 0 变为 1。之后如果我添加更多记录并将其 kitchen_status 更改为 1,那么我只想显示厨房状态为 1 的最新记录。这里是我试图得到的:

$orders = Order::where([ '厨房状态' => 1, 'delivery_status' => 0, ]) ->where('updated_at', \DB::raw("(select max(`updated_at`) from orders)")) ->获取();

这很好用,但是当我添加默认值为 0 的 kitchen_status 的新记录时,不会显示任何记录。我知道 last ->where() 是错误的,但我怎样才能让它正确呢?

简而言之,我想显示所有带有最新 updated_at 的记录。一些小小的帮助将拯救我的一天。

【问题讨论】:

  • 添加你尝试过的代码
  • 我不想限制时间或数量。我想显示所有具有相同和最新的“updated_at”列值的记录。

标签: php mysql laravel laravel-5.5


【解决方案1】:

我不确定我是否 100% 理解了这个问题,但我认为您正在寻找的是

Model::whereDate('updated_at', '>', \Carbon::now()->subHours(2));

这将为您提供updated_at 超过 2 小时的所有记录。该参数可以更改为其他值,例如 10 小时等,如果您需要更大的范围,还有 subDays(), subMonths() 等。

【讨论】:

    【解决方案2】:

    你可以限制你想要的最新条目的数量

    $orders = Order::where([
        'kitchen_status' => 1,
        'delivery_status' => 0,
    ])->orderBy('updated_at','DESC')->limit(20)
        ->get();
    

    您可以将数字更改为您想要的。

    【讨论】:

      【解决方案3】:

      我认为这会有所帮助。

      $orders = Order::where([
      'kitchen_status' => 1,
      'delivery_status' => 0,])->orderBy('update_at','DESC')->paginate(15);
      

      【讨论】:

        【解决方案4】:

        我已经尝试过这段代码,它运行良好,但我仍然在寻找简短而纯粹的方法。这是我找到的代码:

        $orders = Order::select('orders.*')
        ->where('kitchen_status', 1)
        ->where('delivery_status', 0)
        ->where('updated_at', \DB::raw("(SELECT max(updated_at) FROM orders WHERE kitchen_status = 1 AND delivery_status = 0)"))
        ->get();
        

        将此答案作为正确答案是否很好,或者请添加更多答案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-07
          • 1970-01-01
          • 2012-09-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多