Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie erhalte ich Ergebnisse aus der Abfrage, wenn das ausgewählte Datum zwischen zwei Daten liegt?

User::whereHas('availabilities', function ($q) use ($dt) {
    $q->where('unavailable_start_date', '<=', $dt)
      ->where('unavailable_end_date', '>', $dt);
}, '=', 0)->get();

Also kehren wir das irgendwie um. Wir richten die Abfrage in whereHas ein, um die Verfügbarkeiten und Nichtverfügbarkeiten zu finden, die in diesem Bereich liegen. Wir fragen also nach allen nicht verfügbaren Datensätzen (in gewisser Weise). Wir erfassen dann nur Benutzer, die keine Beziehungen haben, die diesen Kriterien entsprechen, indem wir die anderen Argumente für whereHas verwenden ( '=', 0 ).

Daher werden alle Benutzer mit dieser Beziehung, die in diesen Zeitrahmen fallen, nicht zurückgegeben, unabhängig davon, wie viele Verfügbarkeitsdatensätze sie haben. Wenn sich einer von ihnen qualifiziert, schafft er es nicht durch den Filter.