Неправильное добавление часов в метку времени таблицы MySQL Laravel - PullRequest
1 голос
/ 11 июня 2019

Мне нужно получить 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 голосов
/ 11 июня 2019

Может быть это из-за того, что вы использовали whereDate. Метод whereDate может использоваться для сравнения значения столбца с датой. ссылка: https://laravel.com/docs/5.8/queries -> whereDate. Я думаю, что вы должны использовать только где вместо whereDate. Это даст вам текущий вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...