Я довольно новичок в Laravel и мне нужна помощь. Я создаю страницу администратора, где пользователям могут быть назначены несколько ролей с помощью флажков. У меня есть обычные отношения «многие ко многим» и сводная таблица «role_users» с двумя столбцами: role_id и user_id. Различные роли пользователей отображаются нормально, но у меня проблемы с функцией обновления. Моя форма отправляет массив ролей на admincontroller@update, но, конечно, они должны быть связаны с пользователями - и я не могу понять, как это сделать.
Вот моя форма:
<form method="POST" action="{{ route('admin.update') }}" enctype="multipart/form-data">
{{ csrf_field() }}
<table>
<thead>
<th>Name</th>
<th>Email</th>
@foreach ($roles as $role)
<th>{{ $role->name }}</th>
@endforeach
</thead>
<tbody>
@foreach ($users as $user)
<tr>
<td>{{ $user->name }}</td>
<td>{{ $user->email }}</td>
<input type="hidden" name="user[]" value="{{ $user->id }}">
@foreach($roles as $role)
<td><input type="checkbox" name="roles[]" value={{ $role->id }}
@if (in_array($role->id, $user->roles->pluck('id')->toArray() ))
checked ="1"
@endif />
</td>
@endforeach
</tr>
@endforeach
</tbody>
</table>
<input type="submit" class="tableSubmit" value="Update" />
Вот мой метод обновления:
public function update(Request $request, $id) {
$id = $request->input('user');
$user = User::with('roles')->find($id);
$user->roles()->sync(($request->roles), false);
return redirect('/admin');
}
Все это выдает ошибку: «Метод Illuminate \ Database \ Eloquent \ Collection :: role не существует». Но, конечно, у меня есть метод role () в моей модели User:
public function roles() {
return $this->belongsToMany('App\Role');
}
Как мне пройти user_id с идентификаторами ролей, чтобы метод syn c работал? Заранее спасибо за любую помощь!