Laravel |编辑页面上的复选框状态
Laravel | Checkbox state on edit page
我在 Laravel 5 中有一个新案例的创建页面,我可以在其中 link 为案例提供服务。这些服务是我的 createCaseForm 中的复选框。这些服务存储在数据库中,所以我写了一个 ManyToMany table 来拥有许多具有许多服务的案例。
示例:
当我创建 case1 时,我选中了 service1 和 service3 的复选框。所以现在 manyToMany table 已正确填写。现在,当我转到案例的编辑页面时,我希望默认选中 checkbox1 和 checkbox3,因为它们已经 linked 在 manyToMany table.
中
我知道你可以使用 Input::old('username');对于文本字段,但我不知道如何为复选框执行此操作。
我大部分时间都使用 LaravelCollective,但对于这些复选框我没有。所以最好我想要一个 HTML 解决方案,如果可能的话。
谢谢
这是示例代码,您可以执行此操作,如果您使用的是 Blade 模板,则执行此操作,第 3 个参数是 true/false 到 checked/un-checked 复选框
{!! Form::checkbox('agree', 1, ($model->checkbox ==1?true:null), ['class' => 'field']) !!}
在这里您将模型数据库存储的值传递给复选框(在第 3 个参数中)
快速回答
@foreach($services as $service)
<input type="checkbox" name="services[]" value="{{ $service->id }}"
@if (count($case->services->where('id', $service->id)))
checked
@endif>
@endforeach
我假设您在案例和服务之间存在多对多 eloquent 关系。所以 where
是一种收集方法,而不是查询构建器。如果它什么也没找到,它将 return 一个空集合,它本身就是真的(因此 count
函数)。
但对于一种更简洁的方法,如果您一次只查看一个案例,我会继续获取案例具有的所有服务 ID 的简单数组,并将其传递到视图中。
// The eloquent way
$case_services = $case->services->toArray();
// Otherwise, just query for all service IDs
$case_services = DB::table('case_services')->where('etc...')
// You'll end up with something like [24, 47, 103, 287]
那么在你看来,你可以运行像
@foreach($services as $s)
<input type="checkbox" name="{{ $s->name }}" value="{{ $s->service_id }}"
@if( in_array($s->service_id, $case_services) ) checked="1" @endif />
@endforeach
我喜欢第二种解决方案,因为它更容易判断发生了什么,而且对我来说更容易预测。
我在 Laravel 5 中有一个新案例的创建页面,我可以在其中 link 为案例提供服务。这些服务是我的 createCaseForm 中的复选框。这些服务存储在数据库中,所以我写了一个 ManyToMany table 来拥有许多具有许多服务的案例。
示例: 当我创建 case1 时,我选中了 service1 和 service3 的复选框。所以现在 manyToMany table 已正确填写。现在,当我转到案例的编辑页面时,我希望默认选中 checkbox1 和 checkbox3,因为它们已经 linked 在 manyToMany table.
中我知道你可以使用 Input::old('username');对于文本字段,但我不知道如何为复选框执行此操作。
我大部分时间都使用 LaravelCollective,但对于这些复选框我没有。所以最好我想要一个 HTML 解决方案,如果可能的话。
谢谢
这是示例代码,您可以执行此操作,如果您使用的是 Blade 模板,则执行此操作,第 3 个参数是 true/false 到 checked/un-checked 复选框
{!! Form::checkbox('agree', 1, ($model->checkbox ==1?true:null), ['class' => 'field']) !!}
在这里您将模型数据库存储的值传递给复选框(在第 3 个参数中)
快速回答
@foreach($services as $service)
<input type="checkbox" name="services[]" value="{{ $service->id }}"
@if (count($case->services->where('id', $service->id)))
checked
@endif>
@endforeach
我假设您在案例和服务之间存在多对多 eloquent 关系。所以 where
是一种收集方法,而不是查询构建器。如果它什么也没找到,它将 return 一个空集合,它本身就是真的(因此 count
函数)。
但对于一种更简洁的方法,如果您一次只查看一个案例,我会继续获取案例具有的所有服务 ID 的简单数组,并将其传递到视图中。
// The eloquent way
$case_services = $case->services->toArray();
// Otherwise, just query for all service IDs
$case_services = DB::table('case_services')->where('etc...')
// You'll end up with something like [24, 47, 103, 287]
那么在你看来,你可以运行像
@foreach($services as $s)
<input type="checkbox" name="{{ $s->name }}" value="{{ $s->service_id }}"
@if( in_array($s->service_id, $case_services) ) checked="1" @endif />
@endforeach
我喜欢第二种解决方案,因为它更容易判断发生了什么,而且对我来说更容易预测。