如何使用数据库中的选中数据填充表单复选框 laravel 5.8

How to fill the form checkboxes with checked data from database 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'));
    }

我只是想知道如何从数据库中将数据提取到我的复选框中并将它们标记为已选中

我猜你应该检查角色 ID 和用户角色 ID:

@if(in_array($role->id, $user->roles->toArray())) checked @endif

终于找到答案了

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