Laravel Eloquent: risultati di filtraggio e risultati desiderati

5

Quindi ecco il caso d'uso:

Hai utenti e hanno molti indirizzi. Supponi di voler filtrare e caricare gli indirizzi (diciamo ... solo gli indirizzi degli Stati Uniti). Per fare ciò, devi filtrare il carico Eger con filtro utilizzando whereHas in modo che il set di risultati sia solo quegli utenti con indirizzi statunitensi e solo i loro indirizzi statunitensi vengono restituiti. Questo sembra un po 'goffo.

Ecco un esempio:

(new App\User) ->with(['address' => function(){// filter code}]) ->whereHas('address', function(){// pretty much the same filter code}) ->get()

C'è un modo migliore per farlo? Mi sento come se mi mancasse qualcosa.

    
posta Bill Garrison 06.06.2016 - 17:08
fonte

2 risposte

4

Stai confondendo whereHas e with .

Il metodo with ti consente di caricare la relazione solo se la query restituisce true.

Il metodo whereHas ti consente di ottenere solo i modelli che hanno la relazione che restituisce true alla query.

Quindi qui:

(new App\User)->with(['address' => function($query){// filter code}])->get();

restituirà tutti gli utenti, ma caricherà solo l'indirizzo quando il codice del filtro restituisce true.

E qui:

(new App\User)->whereHas(['address' => function($query){// filter code}])->get();

restituirà solo gli utenti che hanno la loro relazione "indirizzo" che restituisce true sul codice del filtro.

    
risposta data 15.06.2016 - 22:15
fonte
0

Sei consapevole che puoi creare relazioni personalizzate come? :

    class User extends Model implements...
    {
     ....

          function USAddresses(){
          return $this->
              belongsToMany(User::class,UserAddresses::class,'user_id','address_id')
              ->withPivot('postal_code')
              ->wherePivot('postal_code', !null );
     }
    } // end model

Nel controller, quindi:

    $this->users->with('USAddresses')->whereHas(...)->get();

In questo modo, i tuoi filtri sono già pronti. (:

    
risposta data 19.10.2016 - 01:58
fonte

Leggi altre domande sui tag