我在Laravel 5中有一个新案例的创建页面,我可以将服务链接到案例。这些服务是我的createCaseForm中的复选框。服务存储在数据库中,因此我写入ManyToMany表以使许多案例具有许多服务。
示例: 当我创建case1时,我检查service1和service3的框。所以现在manyToMany表正确填写。现在,当我转到案例的编辑页面时,我希望默认情况下检查checkbox1和checkbox3,因为它们已经在manyToMany表中链接。
我知道你可以使用像Input :: old(' username');对于文本字段,但我不知道如何为复选框执行此操作。
我大部分时间都使用 LaravelCollective ,但对于这些复选框,我没有。所以我最好想要一个HTML解决方案,如果可能的话。
由于
答案 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个参数中)