我在Laravel 5中有一个新案例的创建页面,在那里我可以将服务链接到案例。这些服务是我的createCaseForm中的复选框。服务存储在数据库中,所以我写到一个ManyToMany表中,以便有许多具有许多服务的案例。
示例:当我创建case1时,我选中了service1和service3的复选框。因此,现在manyToMany表已正确填充。现在,当我转到案例的编辑页面时,我希望默认选中checkbox1和checkbox3,因为它们已经链接到manyToMany表中。
我知道你可以对文本字段使用像Input::old('username');这样的东西,但是我不知道如何在复选框中这样做。
我确实大部分时间都在使用LaravelCollective ,但对于这些复选框,我不使用。当然,如果可能的话,我更希望使用解决方案。
谢谢
发布于 2016-04-01 03:00:12
快速回答
@foreach($services as $service)
<input type="checkbox" name="services[]" value="{{ $service->id }}"
@if (count($case->services->where('id', $service->id)))
checked
@endif>
@endforeach
我假设您在Cases和Services之间具有多对多的雄辩关系。因此where
是一个集合方法,而不是一个查询构建器。如果什么都没有找到,它将返回一个空集合,这本身就是真的(因此使用count
函数)。
但是,为了更简洁,如果您一次只查看一个案例,我将继续获取案例拥有的所有服务it的简单数组,并将其传递到视图中。
// 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-04-01 02:38:34
这是示例代码,您可以执行此操作,如果您使用的是刀片模板,则执行此操作,第3个参数为true/false以选中/取消选中复选框
{!! Form::checkbox('agree', 1, ($model->checkbox ==1?true:null), ['class' => 'field']) !!}
在这里,您正在将您的模型DB存储值传递给复选框(在第三个参数中)
https://stackoverflow.com/questions/36338088
复制相似问题