php-Laravel | PHP编辑页面上的复选框状态
作者:互联网
我在Laravel 5中有一个用于新Case的创建页面,可以在其中将服务链接到Case.这些服务是我的createCaseForm中的复选框.这些服务存储在数据库中,因此我写了一个ManyToMany表以包含具有许多服务的许多Case.
例:
创建case1时,请选中service1和service3的框.因此,现在manyToMany表已正确填写.现在,当我进入案例的编辑页面时,我希望默认情况下选中checkbox1和checkbox3,因为它们已经在manyToMany表中链接了.
我知道您可以使用类似Input :: old(‘username’);的东西.文本字段,但我不知道如何为复选框.
我大多数时候都使用LaravelCollective,但是对于这些复选框,我却没有.因此,最好是我想要一个HTML解决方案,如果可以的话.
谢谢
解决方法:
快速答案
@foreach($services as $service)
<input type="checkbox" name="services[]" value="{{ $service->id }}"
@if (count($case->services->where('id', $service->id)))
checked
@endif>
@endforeach
我假设您在案例和服务之间有着多对多的雄辩关系.因此,这里是一个收集方法,而不是查询生成器.如果找不到任何内容,它将返回一个空集合,该集合本身就是真实的(因此,count函数).
但是对于更简洁的方法,如果您一次只查看一个Case,我将继续获取该Case拥有的所有Service 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
我喜欢第二种解决方案,因为它更容易说明正在发生的事情,并且对我来说更可预测.
标签:laravelcollective,laravel,laravel-5-2,php,checkbox 来源: https://codeday.me/bug/20191118/2031422.html