Laravel 编辑 blade 复选框数组问题
Laravel edit blade checkbox array issue
我的问题 我无法从 edit.blade 中正确保存我的动态复选框,它们只能工作如果值为 1,如果通过隐藏字段提交未选中的复选框,它将覆盖下一组复选框选中的值。
我的代码
我有一个接受订单的 crud 资源,create.blade 中的表单本身有一堆动态字段,可以通过 'add-new' 按钮向订单添加新产品克隆产品字段。
该表格的一部分是一堆工作正常并正确存储的天数复选框。
我被困在哪里
我制作了一个 edit.blade 用于更正创建订单时可能出现的任何错误。
为了回调引用日期复选框的部分,我使用了以下 blade 语法(我知道它与创建不同,主要是因为我试图解决这个问题)
@foreach($orders as $orderkey => $order)
@foreach($days as $day)
{{ Form::hidden($day.'[]', 0, array('id'=> $day.'_hidden_'.$orderkey, 'class' => 'is-checkradio')) }}
{{ Form::checkbox($day.'[]', 1, $order->{$day}, array('id'=> $day.'_'.$orderkey, 'class' => 'is-checkradio')) }}
<label for="<?php echo $day.'_'.$orderkey; ?>"><?php echo $day; ?></label>
@endforeach
@endforeach
OrderController - 更新
我不得不在我的控制器中使用以下内容来更新字段,但是只要未选中复选框,它就会覆盖下一个选中的值。
$customer = Customer::find($id);
foreach($customer->orders as $key => $order){
$Monday[] = $request->Monday[$key];
};
$updates = array(
'Monday' => $Monday,
);
foreach($updates['orders'] as $k => $update){
$update_order->Monday = $updates['Monday'][$k];
$update_order->save();
};
这部分:
foreach($customer->orders as $key => $order){
$Monday[] = $request->Monday[$key];
};
正在创建一个数组,如果现有数据为真并且新数据为真,则保存它。否则删除它。这意味着将捕获任何 取消选择 的复选框,但不会捕获任何 新选中的 复选框。这是你的意图吗?
为什么不直接做:
$updates = array(
'Monday' => $request->Monday,
);
我可能没有完全理解你的问题,所以如果你需要进一步澄清,请评论 and/or 修改问题,
从 Unchecked checkbox returning null value
中找到了修复方法
我需要将我的 $orderkey 添加到名称 []
所以最后这个成功了:
@foreach($days as $day)
{{ Form::hidden($day.'['.$orderkey.']', null, array('id'=> $day.'_hidden_'.$orderkey, 'class' => 'is-checkradio')) }}
{{ Form::checkbox($day.'['.$orderkey.']', 1, $order->{$day}, array('id'=> $day.'_'.$orderkey, 'class' => 'is-checkradio')) }}
<label for="<?php echo $day.'_'.$orderkey; ?>"><?php echo $day; ?></label>
@endforeach
我的问题 我无法从 edit.blade 中正确保存我的动态复选框,它们只能工作如果值为 1,如果通过隐藏字段提交未选中的复选框,它将覆盖下一组复选框选中的值。
我的代码 我有一个接受订单的 crud 资源,create.blade 中的表单本身有一堆动态字段,可以通过 'add-new' 按钮向订单添加新产品克隆产品字段。
该表格的一部分是一堆工作正常并正确存储的天数复选框。
我被困在哪里 我制作了一个 edit.blade 用于更正创建订单时可能出现的任何错误。
为了回调引用日期复选框的部分,我使用了以下 blade 语法(我知道它与创建不同,主要是因为我试图解决这个问题)
@foreach($orders as $orderkey => $order)
@foreach($days as $day)
{{ Form::hidden($day.'[]', 0, array('id'=> $day.'_hidden_'.$orderkey, 'class' => 'is-checkradio')) }}
{{ Form::checkbox($day.'[]', 1, $order->{$day}, array('id'=> $day.'_'.$orderkey, 'class' => 'is-checkradio')) }}
<label for="<?php echo $day.'_'.$orderkey; ?>"><?php echo $day; ?></label>
@endforeach
@endforeach
OrderController - 更新 我不得不在我的控制器中使用以下内容来更新字段,但是只要未选中复选框,它就会覆盖下一个选中的值。
$customer = Customer::find($id);
foreach($customer->orders as $key => $order){
$Monday[] = $request->Monday[$key];
};
$updates = array(
'Monday' => $Monday,
);
foreach($updates['orders'] as $k => $update){
$update_order->Monday = $updates['Monday'][$k];
$update_order->save();
};
这部分:
foreach($customer->orders as $key => $order){
$Monday[] = $request->Monday[$key];
};
正在创建一个数组,如果现有数据为真并且新数据为真,则保存它。否则删除它。这意味着将捕获任何 取消选择 的复选框,但不会捕获任何 新选中的 复选框。这是你的意图吗?
为什么不直接做:
$updates = array(
'Monday' => $request->Monday,
);
我可能没有完全理解你的问题,所以如果你需要进一步澄清,请评论 and/or 修改问题,
从 Unchecked checkbox returning null value
中找到了修复方法我需要将我的 $orderkey 添加到名称 []
所以最后这个成功了:
@foreach($days as $day)
{{ Form::hidden($day.'['.$orderkey.']', null, array('id'=> $day.'_hidden_'.$orderkey, 'class' => 'is-checkradio')) }}
{{ Form::checkbox($day.'['.$orderkey.']', 1, $order->{$day}, array('id'=> $day.'_'.$orderkey, 'class' => 'is-checkradio')) }}
<label for="<?php echo $day.'_'.$orderkey; ?>"><?php echo $day; ?></label>
@endforeach