Как заполнить флажки формы проверенными данными из базы данных laravel 5.8

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