Besoin d'aide ?

between et where

  • Avatar de KYoann
    Membre depuis :
    11/02/2019
    Messages :
    60

    Salut à tous,

    J'essai de faire une requette combinant des between sur mes valeurs de date début et fin afin de controler si certaines période sont déjà enregistré en base, ce qui fonctionne très bien en faisant ca :

    $valeurs = Modele::whereBetween('debut',[$debut,$fin])
    ->orWhereBetween('fin',[$debut,$fin])
    ->get();

    Par contre quand j'essai de rajouter une contrainte, par exemple avec un id présent dans la table, j'ai toujours exactement le même résultat, la contrainte n'est pas utilisé, exemple :

    $valeurs = modele::whereBetween('debut',[$debut,$fin])
    ->orWhereBetween('fin',[$debut,$fin])
    ->where('user_id','=',$request->user_id)
    ->get();

    J'ai bien sur vérifier mes nom de variables, leurs valeurs, les nom des champs etc, c'est vraiment cette contrainte qui n'est pas exploité par l'orm.

    Du coup je suis obliger de faire un truc bien dégeu en bouclant sur mes résultats afin de faire mes traitement de filtrage.....

    Merci

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2632

    Salut,

    Tu veux peut-être ça :

    $valeurs = modele::where('user_id', $request->user_id)->where(function ($q) use($debut, $fin) {
    $q->whereBetween('debut', [$debut, $fin])->orWhereBetween('fin', [$debut, $fin]);
    })->get();
  • Avatar de KYoann
    Membre depuis :
    11/02/2019
    Messages :
    60

    C'est parfait !!

    Je pensais que ce genre de format de "requete" était uniquement fait pour les sous requetes, du coup combien en sont executé sous cette forme ? qu'une seule ?

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2632

    Salut,

    C'est facile d'avoir la réponse avec toSql par exemple. Là on ne génère qu'une requête, c'est juste une histoire d'organisation de where.

  • Avatar de KYoann
    Membre depuis :
    11/02/2019
    Messages :
    60

    Merci pour l'astuce du toSql, je ne la connaissait pas !

Vous ne pouvez pas répondre à ce sujet.