Laravel 5

Eloquent et date dépassée

  • Avatar de VincentPIEPLU
    Membre depuis :
    04/04/2015
    Messages :
    186

    Bonjour à tous !

    J'ai une table 'interested' avec dedans un user_id et un travel_id (entre autres)
    J'ai une table travels (données basiques) et une table infos avec le champs 'end' qui défini la date de fin du voyage.

    Entre travels et infos, j'ai une relation belongsTo.

    Je fais aujourd'hui ceci pour compter les voyages où je suis intéressé :

    Auth::user()->interested

    La relation précédente est :

    public function interested()
    {
    return $this->hasMany('App\Model\Interested');
    }

    Le souci en faisant ça, c'est que j'ai aussi les voyages ayant une date 'end' dépassée.

    Auriez-vous une idée de comment gérer ça ?

    Merci d'avance

  • Avatar de VincentPIEPLU
    Membre depuis :
    04/04/2015
    Messages :
    186

    J'ai avancé en faisant ainsi :

    public function interested()
    {
    return $this->hasMany('App\Model\Interested')->with(['travel.infos' => function($query) {
    $query->where('end', '>', date('Y-m-d H:i:s'));
    }]);
    }

    Mais je m'attendais à avoir Interested vide, et finalement, c'est infos qui est vide.
    Il y aurait une autre solution pour que ce soit interested qui soit vide ?

    Merci

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

    Salut,

    Il vaut mieux conserver la relation de base et élaborer dans la requête :

    $travels = Travel::whereHas('user', function ($q) use ($user_id) {
    $q->whereId($user_id);
    })->whereHas('infos', function ($q) {
    $q->where('end', '>', Carbon::now());
    })->get();

    Si j'ai bien compris la recherche...

  • Avatar de VincentPIEPLU
    Membre depuis :
    04/04/2015
    Messages :
    186

    Salut bestmomo,

    Si je pars sur cette idée, je devrai modifier pas mal de chose sur le site, et ca m'embête un peu.

    Alors qu'en modifier la relation, je me dis que ca pourrait être beaucoup simple/rapide.

    Qu'en penses tu ?

    Merci

Vous ne pouvez pas répondre à ce sujet.