【问题标题】:convert created_at column in laravel to y-m-d format in whereBetween query将laravel中的created_at列转换为whereBetween查询中的y-m-d格式
【发布时间】:2019-01-17 18:43:08
【问题描述】:

这是我的控制器

public function index(){
    $products = Order::whereHas('user', function ($query) {
    if(request()->has('d') && request()->get('d')){
        $arr = [
           'start' => Carbon::parse(substr(request()->get('d'), 4, 11))->format('Y-m-d'),
           'end' =>  Carbon::parse(substr(request()->get('d'), 64, -44))->format('Y-m-d')
                ];
            $builder = $query->whereBetween('created_at', [$arr['start'],$arr['end']]);
           }
        });
   return OrdersResource::collection($orders->latest()->paginate(5));
    }

我的数组$arr 看起来像这样

array:2 [
  "start" => "2018-08-07"
  "end" => "2018-08-09"
]

如何将 laravel 中的 created_at (which is a datetime) 列更改为仅年月日格式

我需要将 created_at 转换为该格式才能执行 laravel 的 whereBetween 查询,因为它没有给我确切的结果

【问题讨论】:

  • 你可以在哪里使用DB::raw('DATE(created_at)'),两个答案都可以

标签: php laravel laravel-5


【解决方案1】:

建议您将startend 更新为第一个日期的开头和最后一个日期的结尾,而不是更改created_at 列的格式。 Carbon 对象应该传递给 whereBetween 方法,而不是它们的字符串表示形式。

$arr = [
   'start' => Carbon::parse(substr(request()->get('d'), 4, 11))->startOfDay(),
   'end' =>  Carbon::parse(substr(request()->get('d'), 64, -44))->endOfDay()
];

// Both `start` and `end` are Carbon objects
$builder = $query->whereBetween('created_at', [$arr['start'],$arr['end']]);

【讨论】:

    【解决方案2】:

    可以使用mysqlDATE()函数

    $builder = $query->whereBetween(DB::raw('DATE(created_at)'), [$arr['start'],$arr['end']]);
    

    如果你想改变日期格式,DATE_FORMAT(created_at, '%Y-%m-%d')

    别忘了导入DB

    use DB;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 2012-07-21
      • 2022-01-03
      • 1970-01-01
      • 2021-03-09
      相关资源
      最近更新 更多