2
votes

dates de recherche avec laravel pas entre les requêtes

Je dois rechercher des données avec des dates et heures données (matin et soir). Comment puis-je trouver les dates disponibles à partir des données avec la requête laravel? Si je recherche les dates du 2019-06-10 au 2019-06-18 . Il ne doit renvoyer que les identifiants 3 et 4. Dans cette requête, il renvoie les identifiants 1, 3 et 4. Quel est le problème avec cette requête dont il ne vérifie pas entre les dates? J'ai une colonne de type de date dans la base de données pour la date de début et de fin. Je veux vérifier deux conditions

  1. Les dates données ne doivent pas être égales à date_from et date_to
  2. Les dates données ne sont pas comprises entre ces dates

Les deux conditions dans la même requête. J'espère que vous comprenez.

$getEvents = Booking::where('category_id', '=', $categoryID)
                ->where('date_from', '!=', $startDate)
                ->where('date_to', '!=', $endDate)
                ->orWhere('date_from', '<', $startDate)
                ->orWhere('date_to', '>', $endDate)
                ->whereNotBetween('date_from', [$startDate,$endDate])
                ->whereNotBetween('date_to', [$startDate,$endDate])
                ->get();
id  event_id   date_from    date_to   

1     1        2019-06-08   2019-06-12  
2     1        2019-06-14   2019-06-16  
3     2        2019-06-20   2019-06-25  
4     3        2019-07-26   2019-07-27 


3 commentaires

dates 2019-06-10 au 2019-06-18, comment l'id 4 est-il retourné ?, il ne devrait être que l'id 3?


Les identifiants 3 et 4 devraient revenir car ces dates ne sont pas dans cette plage ... j'ai plusieurs salles je dois vérifier dans quelle salle ces dates sont disponibles ... c'est pourquoi il devrait renvoyer 3 et 4


Les deux ou Où pourrait vous causer un problème, je pense que vous devriez les joindre


3 Réponses :


1
votes

En supposant que $ endDate sera toujours supérieur (ou égal) à $startDate

$getEvents = Booking::where('category_id', '=', $categoryID)
            ->whereDate('date_to', '<', $startDate)
            ->whereDate('date_from', '>', $endDate)
            ->get();
  1. Les dates données ne sont pas comprises entre ces dates
    //->where('date_from', '<>', $startDate)->where('date_from', '<>', $endDate)
    //->where('date_to', '<>', $startDate)->where('date_to', '<>', $endDate)

Si donné $ startDate est supérieur à db 'date_to' , $ startDate n'est pas compris entre 'date_to' et 'date_from' . Récupérera les enregistrements avec 'date_to' inférieur à "2019-06-10".

Et quand le 'date_from' donné code> est supérieur à $ endDate , $ endDate n'est pas compris entre 'date_to' et 'date_from' . Récupérera les enregistrements avec 'date_from' supérieur à "2019-06-18".

  1. Les dates données ne doivent pas être égales à date_from et date_to

Ce n'est pas nécessaire puisque dans la requête du point 2, nous utilisons> et

        ->whereDate('date_to', '<', $startDate)
        ->whereDate('date_from', '>', $endDate)

Juste:

$startDate = "2019-06-10";
$endDate = "2019-06-18";


1 commentaires

cela ne fonctionne pas non plus ... Je veux vérifier deux conditions 1) Les dates données ne doivent pas être égales à date_from et date_to 2) Les dates données ne sont pas entre ces dates, les deux conditions dans la même requête.



0
votes

Laravel 5
$getEvents = Booking::where('category_id', '=', $categoryID)
                ->where('date_from', '<', $startDate)
                ->where('date_to', '>', $endDate)
                ->get();


0 commentaires

0
votes

Essayez ceci

DB::table('table_name')
    ->whereNotBetween('date', [star_date, end_date])    
    ->get();


0 commentaires