web-dev-qa-db-fra.com

Laravel: insertion plusieurs à plusieurs

J'ai deux modèles, User et Team La relation entre eux est ManyToMany:

Dans User:

public function teamMembers(){
    return $this->belongsToMany('App\Team')->withPivot('id');;
}

Et dans Team:

public function teamMembers(){
    return $this->belongsToMany('App\User')->withPivot('id');;
}

Maintenant, je veux ajouter des utilisateurs à une équipe spécifique. Le nom du tableau croisé dynamique est donc team_user.

Maintenant, les données que je veux insérer dans le tableau croisé dynamique sont:

array:4 [▼
  "_token" => "mlwoAgCQYals1N1s2lNa4U5OTgtMNHh9LUhNGrWh"
  "team_id" => "1"
  "members_id" => array:3 [▼
    0 => "2"
    1 => "3"
    2 => "4"
  ]
  "status" => "1"
]

Ce que je fais dans mon contrôleur:

$team_id = $request->get("team_id");
$team = \App\Team::findOrFail($team_id);
foreach ($request->get('members_id') as $key => $value) {
    $team->teamMembers()->attach($team);
    $team->save();
}

Mais il n'insère qu'un seul enregistrement, je veux dire le team_id et le premier member_id. Je veux qu'il crée un enregistrement par membre à partir du members_id tableau. Comment vais-je faire ça?

16
Gammer

Vous devez transmettre un tableau d'ID utilisateur à la méthode attach() .

Pour plus de commodité, attach et detach acceptent également les tableaux d'ID en entrée

Changez votre code pour:

$team = \App\Team::findOrFail($request->team_id);
$team->teamMembers()->attach($request->members_id);
25
Alexey Mezenin