Php 将laravel中列处创建的_转换为y-m-d格式,在whereBetween查询中

Php 将laravel中列处创建的_转换为y-m-d格式,在whereBetween查询中,php,laravel,laravel-5,Php,Laravel,Laravel 5,这是我的控制器 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, 1

这是我的控制器

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转换为该格式,以便执行laravel的whereBetween查询,因为它没有给我确切的结果,而不是更改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']]);

您可以使用mysql
DATE()
函数

$builder = $query->whereBetween(DB::raw('DATE(created_at)'), [$arr['start'],$arr['end']]);
如果要更改日期格式,
date\u格式(创建于,'%Y-%m-%d')

别忘了导入
DB

use DB;
您可以在其中使用
DB::raw('DATE(created_at)
,这两个答案都适用