【发布时间】:2020-05-01 05:12:15
【问题描述】:
我有一个 foreach 循环,其中有一个复选框。我不确定如何正确地从表单中的复选框到控制器中的验证。我的看法如下:
<table class="table">
<thead>
<tr>
<th scope="col">Select</th>
</tr>
</thead>
<tbody>
@foreach($plans as $plan)
<tr>
<td>
<input type='checkbox' name='Plan {{$plan->{'Plan ID'} }}' class='form-check-input' value='true'
@if(old($plan->{'Plan ID'},$plan->{'Plan ID'})=="true") checked @endif>
</td>
<td> {{$plan->{'Plan ID'} }}</td>
@endforeach
</tr>
</tbody>
</table>
我的控制器中有以下内容:
$data = request()->validate ([
'current' => '',
'instructions' => '',
'Plan 1' => '',
'Plan 2' => '',
'Plan 3' => '',
'Plan 4' => '',
'Plan 5' => '',
'Plan 6' => '',
'Plan 7' => '',
'Plan 8' => '',
'Plan 9' => '',
'Plan 10' => '',
'Plan 11' => '',
'Plan 12' => '',
'Plan 13' => '',
'Plan 14' => '',
'Plan 15' => '',
]);
$plansubmission = PlanSubmission::find($id);
//$plansubmission->update($data);
$designs = MedicalDesignsToQuote::find($id);
if($designs==null){
$design = MedicalDesignsToQuote::create(['id'=>$id]);
$design->update($data);
}
else{
$designs->update($data);
我不想为 'name' 属性使用数组
将此添加到控制器:
$validator = Validator::make($request->all(), [
"list.*.id" => '', // Object exist validation
"list.*.value" => '',
'current' => '',
'instructions' => '',
]);
$bodyContent = $request->getContent($validator);
$plansubmission = PlanSubmission::find($id);
// $plansubmission->update($data);
$designs = MedicalDesignsToQuote::find($id);
if($designs==null){
$design = MedicalDesignsToQuote::create(['id'=>$id]);
// $design->update($data);
$design->update($validator);
}
else{
$designs->update($validator);
}
我的表中有以下列:
id
current
instructions
Plan 1
Plan 2
Plan 3
Plan 4
Plan 5
.....
Plan 50
用户可以通过复选框选择 50 个计划选项中的任何一个或全部。例如,如果选择了计划 5,则表中该给定行的值对于计划 5 将是“真”。
所以,要持久化数据,我希望我需要做这样的事情:
$formData = $request->all();
foreach ($formData['list'] as $planData) {
MedicalPlanDesignToQuote::updateOrCreate(
[$planData['id']] => $planData['value']],
);
}
如果我有两个名为 id 和 value 的列,我想我可以这样做:
foreach ($formData['list'] as $planData) {
MedicalPlanDesignToQuote::updateOrCreate(
['id' => $planData['id']],
['value' => $planData['value']]
);
}
无论如何我可以用我的表结构做到这一点吗?
【问题讨论】:
-
您需要什么验证,至少要选择一个?
-
您的计划栏的名称是什么?现在看来你有一个空间。
-
计划列名是Plan 1, Plan 2, Plan 3.....Plan 15
-
我认为如果你将 Plan 1、Plan 2 Plan 3 移动到数组
plans => [0 => data, 1 => data]中,你将有更简单的方法来循环它们。如果您不希望计划包含超过 15 个项目,您可以使用'array|max:15'验证计划。
标签: laravel