4

我在 Laravel 5 中有一个新案例的创建页面,我可以在其中将服务链接到案例。这些服务是我的 createCaseForm 中的复选框。这些服务存储在数据库中,所以我写入一个 ManyToMany 表以拥有许多具有许多服务的案例。

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

我知道你可以使用 Input::old('username'); 对于文本字段,但我不知道如何为复选框执行此操作。

我大部分时间都使用LaravelCollective,但对于这些复选框我没有。所以最好我想要一个 HTML 解决方案,如果可能的话。

谢谢

4

2 回答 2

2

快速回答

 @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

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

于 2016-03-31T19:00:12.310 回答
2

这是示例代码,您可以执行此操作,如果您使用 Blade 模板,请执行此操作,第三个参数为 true/false 以选中/取消选中复选框

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

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

于 2016-03-31T18:38:33.980 回答