错误地将小时数添加到MySQL表列时间戳Laravel

时间:2019-06-11 05:30:48

标签: php mysql sql laravel laravel-5.5

我需要获取3种类型的记录才能向这些记录发送提醒,首先,我需要在创建记录的24小时之后发送提醒,然后在48小时之后再到72小时之后发送提醒。

到目前为止,我已经完成了此操作,但是它似乎无法正常工作,因为,假设当当前日期变为2019-06-10 19:00:00时在2019-07-10 00:01:00上创建了一条记录,那么似乎认为24小时已经过去:

$fecha_hoy = Carbon::now();
$solicitudes_24 = SolicitudUser::whereDate(DB::raw('DATE_ADD(created_at, INTERVAL 24 HOUR)'), '<', $fecha_hoy)
                        ->whereDate(DB::raw('DATE_ADD(created_at, INTERVAL 48 HOUR)'), '>', $fecha_hoy)
                        ->whereNull('recordatorio_estado')
                        ->whereHas('curso', function($query){
                            $query->whereHas('operativo', function ($q){
                                $q->whereDate('dateOfertaAcademicaOperativoFechaRegistroFin', '>', Carbon::now());
                            });
                        })
                        ->where(function($query){
                            $query->where('registro_completo', 0)
                                ->orWhereNull('registro_completo');
                        })
                        ->get();

$solicitudes_48 = SolicitudUser::whereDate(DB::raw('DATE_ADD(tblusersSolicitudes.created_at, INTERVAL 48 HOUR)'), '<', $fecha_hoy)
                        ->whereDate(DB::raw('DATE_ADD(tblusersSolicitudes.created_at, INTERVAL 72 HOUR)'), '>', $fecha_hoy)
                        ->where(function($query){
                            $query->where('recordatorio_estado', 1)
                                    ->orWhereNull('recordatorio_estado');
                        })
                        ->whereHas('curso', function($query){
                            $query->whereHas('operativo', function ($q){
                                $q->whereDate('dateOfertaAcademicaOperativoFechaRegistroFin', '>', Carbon::now());
                            });
                        })
                        ->where(function($query){
                            $query->where('registro_completo', 0)
                                ->orWhereNull('registro_completo');
                        })
                        ->get();

$solicitudes_72 = SolicitudUser::whereDate(DB::raw('DATE_ADD(tblusersSolicitudes.created_at, INTERVAL 72 HOUR)'), '<', $fecha_hoy)
                        ->where(function($query){
                            $query->where('recordatorio_estado', 2)
                                    ->orWhereNull('recordatorio_estado');
                        })
                        ->whereHas('curso', function($query){
                            $query->whereHas('operativo', function ($q){
                                $q->whereDate('dateOfertaAcademicaOperativoFechaRegistroFin', '>', Carbon::now());
                            });
                        })
                        ->where(function($query){
                            $query->where('registro_completo', 0)
                                ->orWhereNull('registro_completo');
                        })
                        ->get();

我该如何解决?

PD。您可以忽略查询链中不涉及日期的其余部分。

1 个答案:

答案 0 :(得分:0)

可能是因为您使用了whereDate。 whereDate方法可用于将列的值与日期进行比较。 参考:https://laravel.com/docs/5.8/queries-> whereDate。 我认为您应该只使用where而不是whereDate。这将为您提供当前输出。