Laravel|编辑页面上的复选框状态


Laravel | Checkbox state on edit page

我在Laravel 5中有一个新案例的创建页面,在那里我可以将服务链接到案例。服务是我的createCaseForm中的复选框。服务存储在DB中,所以我写了一个ManyToMany表,以拥有许多具有许多服务的Case。

示例:创建case1时,我会选中service1和service3的复选框。因此,现在manyToMany表已正确填写。现在,当我转到案例的编辑页面时,我希望默认选中checkbox1和checkbox3,因为它们已经在manyToMany表中链接。

我知道你可以使用输入::old("用户名");对于文本字段,但我不知道如何对复选框执行此操作。

我大部分时间都使用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

我假设您在案例和服务之间有一种多对多的雄辩关系。因此,where是一个集合方法,而不是查询生成器。如果它什么也没找到,它将返回一个空集合,这个集合本身就是真的(因此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

我只是喜欢第二个解决方案,因为它更容易判断发生了什么,对我来说也更可预测

这是示例代码,你可以这样做,如果你使用的是Blade模板,那么就这样做,第三个参数是true/false来选中/取消选中复选框

{!! Form::checkbox('agree', 1, ($model->checkbox ==1?true:null), ['class' => 'field']) !!}

在这里,您将您的模型DB存储值传递给复选框(在第三个参数中)