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
}
]
}
]
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()