J'ai deux tableaux Utilisateurs et Groupes , je souhaite ajouter des utilisateurs dans des groupes avec une relation éloquente . Tables mysql:
Table Groupes :
<div class="form-group"> <select name="user_id[]" class="form-control" multiple> @foreach ($users as $user) <option value="{{$user->id}}">{{$user->name}}</option> @endforeach </select> </div>
Table Utilisateurs :
public function store(Request $request) { $request->validate([ 'name'=>'required|string', 'user_id' => 'required', ]); $group = new Group([ 'name' => $request->get('name'), 'user_id'=> $request->get('user_id') ]); $group->save(); return redirect('/groups')->with('success', 'Group has been added'); }
3 Réponses :
Utilisez la boucle for pour enregistrer l'utilisateur dans le groupe.
foreach($request->user_id as $user_id) $group = new Group([ 'name' => $request->get('name'), 'user_id'=> $user_id ]); $group->save(); )
hé, j'obtiens "Variable non définie: user_id"
Merci pour ton aide
comme d'autres commentaires l'ont indiqué, vous devriez les parcourir en boucle.
Ne devriez-vous pas avoir le group_id sur le modèle utilisateur?
De cette façon, vous avez un nom de groupe unique et pouvez ajouter un utilisateur à un groupe ou si vous voulez qu'un utilisateur appartienne à plusieurs groupes, créez un tableau croisé dynamique pour lui.
foreach ($request->get('user_id') as $userid){ $group = new Group(); $group->name = $request->get('name'); $group->user_id = $userid; $group->save(); }
Oui, c'est la bonne manière, parent enfant, mais comment vais-je alors passer à la vue de groupe et sélectionner les utilisateurs? pour les ajouter au groupe
voir mon exemple dans l'édition, j'espère que cela le rend clair
Merci pour ton aide
Ce que vous avez essayé de faire n'est pas possible par la structure de votre table. Vous devez changer la structure de votre table,
un groupe - plusieurs utilisateurs,
Donc, la structure de votre table doit être,
Groupe p >
public function store(Request $request) { $request->validate([ 'name'=>'required|string', 'user_id' => 'required|array', ]); $group = new Group([ 'name' => $request->get('name'), ]); $group->save(); foreach($request->get('user_id') as $id) { $user = App\User::findOrFail($id); $user->group_id = $group->id $user->save(); } return redirect('/groups')->with('success', 'Group has been added'); }
Utilisateur
public function group() { return $this->belongsTo('App\Group', 'group_id'); }
Et votre définition de relation devrait être,
Modèle de groupe
public function users() { return $this->hasMany('App\User', 'group_id'); }
Modèle utilisateur
id name email password group_id
Et enfin,
id name
$ user_id
n'est pas défini.
Merci beaucoup pour votre réponse complète