这是我的控制器
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查询,因为它没有提供确切的结果
答案 0 :(得分:1)
我建议您将created_at
和start
更新为第一个日期的开始和最后一个日期的结束,而不是更改end
列的格式。 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']]);
答案 1 :(得分:0)
您可以使用mysql DATE()
函数
$builder = $query->whereBetween(DB::raw('DATE(created_at)'), [$arr['start'],$arr['end']]);
如果要更改日期格式,请DATE_FORMAT(created_at, '%Y-%m-%d')
不要忘记导入DB
use DB;