#laravel #eloquent #laravel-5.8
#laravel #красноречивый #laravel-5.8
Вопрос:
У меня проблема в моей форме обновления,
Я создаю пользователя с несколькими ролями, назначенными с помощью флажков в моей форме, и когда мне нужно обновить пользователя, я получаю все данные в поля ввода формы обновления, за исключением полей флажков, которые будут пустыми. Есть ли способ, которым я могу установить флажок с данными из базы данных?
Вот мои отношения с моделью пользователя
public function roles()
{
return $this->belongsToMany(Role::class)->withTimestamps();
}
Вот мои отношения с образцом для подражания
public function users()
{
return $this->belongsToMany(User::class)->withTimestamps();
}
Вот моя форма редактирования пользователя
<form action="{{ route('users.update',['user'=>$user]) }}" method="POST">
@method('PATCH')
<div class="form-group">
<label for="name">Name</label>
<input type="text" name="name" class="form-control" value="{{ old('name') ?? $user->name }}">
<span class="text-danger">{{ $errors->first('name') }}</span>
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="text" name="email" class="form-control" value="{{ old('email') ?? $user->email }}">
<span class="text-danger">{{ $errors->first('email') }}</span>
</div>
<div class="form-group">
@foreach ($roles as $role)
<label for="role">{{ $role->name }}</label>
<input type="checkbox" name="role[{{$role->id}}]" value="{{ old($role->id) }}"
@if(in_array($role->id,old('role',[]) )) checked @endif >
@endforeach
<span class="text-danger">{{ $errors->first('role') }}</span>
</div>
@csrf
<button class="btn btn-primary" type="submit">Create</button>
</form>
Вот моя функция редактирования
public function edit(User $user)
{
$roles = Role::all();
return view('users.edit', compact('user', 'roles'));
}
Я просто хотел знать, как я могу перенести данные в свои флажки из базы данных и пометить их как отмеченные
Ответ №1:
Я думаю, вам следует проверить идентификатор роли с идентификатором роли пользователя:
@if(in_array($role->id, $user->roles->toArray())) checked @endif
Ответ №2:
Наконец-то я нашел ответ
<div class="form-group">
@foreach ($roles as $role)
<label for="role">{{ $role->name }}</label>
<input type="checkbox" name="role[]" value="{{ $role->id }}"
{{ $role->users->contains($user->id) ? 'checked' : '' }}
@if(in_array($role->id,old('role',[]))) checked @endif>
@endforeach
<span class="text-danger">{{ $errors->first('role') }}</span>
</div>