редактировать и обновлять данные с помощью множественного выбора.отношения один ко многим - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть две таблицы: группа (родитель) и пользователи (ребенок).Я могу читать данные из каждой группы, но хочу показать их внутри мультиселекции, чтобы можно было удалить или добавить больше пользователей в группу и обновить.

Контроллер группы:

  public function edit($id)
   {
   //
   $group= Group::find($id);
   $users = User::where('group_id',$id)->get();


   return view('group.edit',compact('group','users'));
 }

 public function update(Request $request, $id)
 {
 $request->validate([
 'name'=> 'required',
 'group_id' => 'required|array',
 ]);

 $group = Group::find($id);
 $group ->name = $request->get('name');


       //something missing/wrong here

 $group->save();



 return redirect('/groups')->with('success', 'Group has been edited');
 }

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

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

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

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

вид редактирования:

<form method="post" action="{{ route('groups.update', $group->id) }}">
    @method('PATCH')
    @csrf
    <div class="form-group">
      <label for="name">Name:</label>
      <input type="text" class="form-control" name="name" value={{ $group->name }} />
    </div>
    <div class="form-group">
        <select name="group_id[]" id="users" class="form-control"  multiple>
            @foreach ($users as $user)
            <option value="{{$user->id}}">{{$user->name}}</option>
            @endforeach
        </select>
        </div>
    <a href="{{url()->previous()}}" class="pull-right btn btn-danger" >Cancel</a>
    <button type="submit" class="pull-right btn btn-primary" style="margin-right:5px;">Update</button>
  </form>

Структура базы данных:

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

id
name

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

id
name
email
group_id

Я использую пакет select2, и вот что я пытаюсь сделать:

https://ibb.co/Y8vWHpy.

Спасибо

Ответы [ 2 ]

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

привет, это работает для меня, я надеюсь, что это полезно для вас в режиме редактирования

   $group= Group::find($id);
   $allUsers=['users'=>User::get()->pluck('name','id')];
   $users = User::where('group_id',$id)->pluck('id')->toArray();
   return view('group.edit',compact('group','users','allUsers'));

в вашем представлении

{!! Form::select("group_id[]",array_get($allUsers,'allUsers'),$users,["class"=>"form-control select2","multiple"=>'multiple']) !!}

И, наконец, в вашем обновлении

Я не могу понять, что именно произошло, но у вас будет идентификатор пользователя в вашем обновлении

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

Я думаю, что это будет работать

  $group = Group::find($id)->delete();
  $name= $request->input('name');
  $group_ids= $request->input('group_id')
    foreach($group_ids as $group_id){
      $group = new Group();
      $group ->name= $name;
      $group ->group_id= $group_id;
      $group->save();
   }
...