Laravel |编辑页面

时间:2016-03-31 15:49:38

标签: php laravel checkbox laravel-5.2 laravelcollective

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

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

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

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

由于

2 个答案:

答案 0 :(得分:2)

快速回答

 @foreach($services as $s)
      <input type="checkbox" name="{{ $s->name }}" value="{{ $s->service_id }}"
           @if( count($case->services->where('service_id', $s->service_id)) )
                checked="1"
           @endif />
 @endforeach

我假设你在案例和服务之间有很多雄辩的关系。因此where是一个集合方法,而不是查询构建器。如果没有找到任何内容,它将返回一个空集合,这本身就是真正的(因此count函数)。

但是对于更简洁的方法,如果你只是一次查看一个Case,我会继续获取一个包含案例所有服务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

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

答案 1 :(得分:1)

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

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

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