Comment vérifier si les heures de travail d'un utilisateur spécifique pour une période donnée existent déjà dans la base de données. Par conséquent, la fonction doit renvoyer vrai lorsque les heures de travail chevauchent la date et l'heure données. Je l'ai essayé mais ça ne marche pas.
fonction checkExistingWorkingHours($user_id, $start_date, $start_time, $end_date, $end_time) { // jj($user_id . " " . $start_date . " " . $start_time . " " . $end_date . " " . $end_time); $startDateTime = Carbon::parse($start_date . ' ' . $start_time); $endDateTime = Carbon::parse($end_date . ' ' . $end_time); $overlapExists = WorkingHour::where('user_id', $user_id) ->where(function ($query) use ($startDateTime, $endDateTime) { $query->where(function ($query) utiliser ($startDateTime, $endDateTime) { // Vérifie le chevauchement là où start_datetime se situe entre start_datetime et end_datetime existants $query->where(function ($query) utiliser ($startDateTime, $endDateTime) { $query->where('start_date', '=', $startDateTime->format('Y-m-d')) ->where('start_time', '<', $endDateTime->format('H:i')) ->where('end_date', '=', $startDateTime->format('Y-m-d')) ->where('end_time', '>', $startDateTime->format('H:i')); })->ouOù(fonction ($query) utiliser ($startDateTime, $endDateTime) { $query->where('start_date', '<', $startDateTime->format('Y-m-d')) ->where('end_date', '=', $startDateTime->format('Y-m-d')) ->where('end_time', '>', $startDateTime->format('H:i')); }); })->ouOù(fonction ($query) utiliser ($startDateTime, $endDateTime) { // Vérifie le chevauchement là où end_datetime se situe entre start_datetime et end_datetime existants $query->where(function ($query) utiliser ($startDateTime, $endDateTime) { $query->where('start_date', '=', $endDateTime->format('Y-m-d')) ->where('end_date', '>=', $endDateTime->format('Y-m-d')) ->where('start_time', '<', $endDateTime->format('H:i')); })->ouOù(fonction ($query) utiliser ($startDateTime, $endDateTime) { $query->where('start_date', '<=', $startDateTime->format('Y-m-d')) ->where('end_date', '>=', $endDateTime->format('Y-m-d')); }); }); })->existe(); retourner $overlapExists ; }Lorsque je teste la fonction avec les données suivantes, cela indique qu'il y a un chevauchement même s'il n'y en a pas.
Vérifiez les heures de travail existantes (1, 2023-06-01, 00:15, 2023-06-01, 03:00) ;
La valeur dans la base de données est le 01/06/2023 de 15h30 à 23h00.
Essayez d'utiliser ceci
Réponse basée sur le commentaire de Geertjanknapen :