2015-08-19 15 views
10

Ho un ruolo modello che appartiene a molti utenti.Ottieni la matrice ids dal modello laravel correlato che sta avendo una relazione molto personale

Class Role { 
    public $fillable = ["name"]; 

    public function users() 
    { 
      return $this->belongsToMany('App/Models/User')->select(['user_id']); 
    } 
} 

Quando recupero gli utenti che utilizzano con query nel ruolo. Voglio che sarebbe tornato solo user_ids serie

Role::with("users")->get(); 

deve restituire l'output seguente

[ 
    { 
    "name": "Role1", 
    "users" : [1,2,3] 
    }, 
    { 
    "name": "Role2", 
    "users" : [1,2,3] 
    } 
] 

Attualmente dà output seguente

[ 
    { 
    "name": "Role1", 
    "users" : [ 
     { 
      user_id : 1 
     }, 
     { 
      user_id : 2 
     }, 

     { 
      user_id : 3 
     } 
    }, 
    { 
    "name": "Role2", 
    "users" : [ 
     { 
      user_id : 1 
     }, 
     { 
      user_id : 2 
     }, 

     { 
      user_id : 3 
     } 
    ] 
    } 
] 
+0

Potresti riuscire ad ottenerlo usando '-> liste ('user_id')' di '-> all()'. – Jeemusu

+0

prova questo return $ this-> belongsToMany ('App/Models/User') -> liste ('user_id'); –

+0

Scusa se ho usato "-> get" not "-> all". Ho modificato la mia domanda. @Jeemusu, fornisce una serie di ID per tutti i record, ho bisogno di user_ids per ruolo – sp11

risposta

17

Personalmente, non vorrei cambiare il rapporto users() , ma forse aggiungere un accessor per gli ID utente

class Role { 
    protected $fillable = ["name"]; 

    // adding the appends value will call the accessor in the JSON response 
    protected $appends = ['user_ids']; 

    public function users() 
    { 
     return $this->belongsToMany('App/Models/User'); 
    } 

    public function getUserIdsAttribute() 
    { 
     return $this->users->pluck('user_id'); 
    } 
} 

Quindi si ha ancora una relazione di lavoro, ma è possibile accedere agli ID utente come una matrice nella risposta del ruolo. Se ciò non funziona per te, come citato da @Creator, potresti probabilmente aggiungere ->lists('id') nella relazione anziché lo select()

+0

Sta funzionando. Grazie :) – sp11

+0

In Laravel 5.5+ dovevo restituire $ this-> users-> pluck ('pivot.user_id'); 'o solo per usare" id ". – llioor