编程语言
首页 > 编程语言> > php-Laravel | PHP编辑页面上的复选框状态

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