Я хочу добавить людей в группы с красноречивым Laravel 5 - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть две таблицы Пользователи и Группы , я хочу добавить пользователей в группы с красноречивым отношением .Таблицы mysql:

Группы Таблица:

      id
      name
      user_id

Пользователи Таблица:

      id
      name
      email
      password

Группа.Модель php имеет:

    public function user()
        {
            return $this->hasMany('App\User');
        }

User.php Модель имеет:

    public function group()
       {
           return $this->belongsTo('App\Group');
       }

GroupController.php

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

create.blade.php view

    <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>

Ошибка " Преобразование массива в строку " Если я добавлю "dd ($ group) "перед сохранением () в TeamController я получаю user_ids dd results , но когда он пытается $ group-> save ();я получаю ошибку, любая помощь?Спасибо

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

, как указано в других комментариях, вы должны зацикливаться на них.
Разве у вас не должно быть group_id в модели пользователя, хотя?
Таким образом, у вас есть уникальное имя группы, и вы можете добавить пользователя в группу или, еслиВы хотите, чтобы пользователь принадлежал ко многим группам, создайте для него сводную таблицу.

Таблица групп:

id
name

Таблица пользователей:

id
name
email
password
group_id

изменить: как указанодругими ребятами вам придется зацикливаться на них.переменная $request->get('user_id') содержит массив всех пользователей, выбранных в вашем теге.Вы хотите зацикливаться на этом.это создаст дублированные имена в вашей группе таблиц, хотя.

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

0 голосов
/ 06 февраля 2019

То, что вы пытались сделать, невозможно из-за структуры вашей таблицы.Вам нужно изменить структуру таблицы,

одна группа - много пользователей,

Итак, структура вашей таблицы должна быть,

Группа

  id
  name

Пользователь

  id
  name
  email
  password
  group_id

И определение вашего отношения должно быть,

Модель группы

  public function users()
   {
      return $this->hasMany('App\User', 'group_id');
   }

Модель пользователя

   public function group()
    {
       return $this->belongsTo('App\Group', 'group_id');
    }

И, наконец,

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');
 }
0 голосов
/ 06 февраля 2019

Используйте для цикла, чтобы сохранить пользователя в группу.

foreach($request->user_id as $user_id)
     $group = new Group([
         'name' => $request->get('name'),
         'user_id'=> $user_id
     ]);
     $group->save();
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...