web-dev-qa-db-fra.com

Récupère le tableau des ID à partir du modèle laravel modèle qui a une relation d'appartenance à beaucoup)

J'ai un rôle modèle qui appartient à de nombreux utilisateurs.

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

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

Lorsque je récupère des utilisateurs à l'aide de la requête dans le rôle. Je veux qu'il ne renvoie que le tableau user_ids

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

il devrait retourner la sortie suivante

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

Actuellement, il donne la sortie suivante

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

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

        {
           user_id : 3
        }
     ]
   }
 ]
18
sp11

Personnellement, je ne changerais pas la relation users(), mais peut-être ajouter un accesseur pour les ID utilisateur

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');
    }
}

Ensuite, vous avez toujours une relation de travail, mais vous pouvez accéder aux ID utilisateur sous forme de tableau dans la réponse de rôle. Si cela ne fonctionne pas pour vous, comme mentionné par @Creator, vous pouvez probablement simplement ajouter ->pluck('id') dans la relation plutôt que select()

30
benJ