Я пробовал много способов заполнить старые проверенные значения на странице редактирования livewire.
Способ 1:
public $role_id, $name, $new_permissions = [];
public function mount($id)
{
/
$old_permissions = \App\Models\UserRolePermission::where('user_role_id', $this->role_id)->pluck('permission_id')->toArray();
// here new_permissions is my wire:model name in view for the checkbox input
// so I tried to initialize the new_permissions array by old_permissions array
$this->new_permissions = $old_permissions;
$this->role_id = $id;
}
Способ 2:
Вручную получил разрешения в представлении и проверил in_array для проверки old_permissions:
@php
$old_permissions = \App\Models\UserRolePermission::where('user_role_id', $this->role_id)->pluck('permission_id')->toArray();
@endphp
<div class="col-md-12">
<div class="form-group">
<label class="display-block text-semibold">Select Permissions</label>
@foreach($permissions as $item)
<label class="checkbox-inline">
<input type="checkbox" wire:model="new_permissions" class="" value="{{ $item->id }}" {{ in_array($item->id, $old_permissions) ? "checked" : "" }}>
{{ $item->name }} </label>
@endforeach
</div>
</div>
Во втором методе мой код в источнике представления был правильным, старые были проверены в поле ввода, а новые — нет, но в представлении флажки не были отмечены.
Livewire использует строковое значение вместо числового.
Чтобы исправить это, преобразуйте все целые числа в массиве $ old_permissions в строки вроде
Вот мое решение
В поле зрения
В классе компонентов Livewire