1
votes

Je veux ajouter des personnes dans des groupes avec l'éloquent laravel 5

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


0 commentaires

3 Réponses :


0
votes

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();
)


2 commentaires

hé, j'obtiens "Variable non définie: user_id"


Merci pour ton aide



0
votes

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.

Tableau des groupes:

foreach ($request->get('user_id') as $userid){
    $group = new Group();
    $group->name = $request->get('name');
    $group->user_id = $userid;
    $group->save();
}
      


3 commentaires

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



2
votes

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


2 commentaires

$ user_id n'est pas défini.


Merci beaucoup pour votre réponse complète