我已经做了大量的查看旧帖子但没有运气, 我正在尝试从单个表单更新表中的多个行,其中ID是主键。
内容显示在电子表格中,用户可以在其中编辑多行。
我收到一个未定义的索引:ID错误。
我正在使用的代码似乎非常接近,虽然有些不对劲。
如果以前有人这样做并且可以更正此代码,我们将非常感谢您的帮助!
谢谢。
protected function updateMultiple(Request $request)
{
$data = $request->except(['_token']);
// dd($data);
for($i = 0; $i <= count($data['id']); $i++) {
$input = [
'id' => $data['id'][$i],
'Channel' => $data['Channel'][$i],
'Posts' => $data['Posts'][$i],
'Monthly_Admin_Fee' => $data['Monthly_Admin_Fee'][$i],
'Legal_Fee' => $data['Legal_Fee'][$i],
'Valuation_Fee' => $data['Valuation_Fee'][$i],
'Mortgage_Risk_Fee' => $data['Mortgage_Risk_Fee'][$i],
];
DB::table('membership')->update($input);
}
}
查看
@foreach($members as $member)
<tr>
<td class="text-right">
<input type="text" style="padding-right: 8px;padding-left: 8px;" name="id[]" id="id">{{$member->id}}</td>
<td><input type="text" id="Channel" name="Channel[]" class="form-control" value="{{$member->Channel}}"></td>
<td><input type="text" id="Posts" name="Posts[]" class="form-control" value="{{$member->Posts}}"></td>
<td><input type="text" id="Monthly_Admin_Fee" name="Monthly_Admin_Fee[]" class="form-control" value="{{$member->Monthly_Admin_Fee}}"></td>
<td><input type="text" id="Legal_Fee" name="Legal_Fee[]" class="form-control" value="{{$member->Legal_Fee}}"></td>
<td><input type="text" id="Valuation_Fee" name="Valuation_Fee[]" class="form-control" value="{{$member->Valuation_Fee}}"></td>
<td><input type="text" id="Mortgage_Risk_Fee" name="Mortgage_Risk_Fee[]" class="form-control" value="{{$member->Mortgage_Risk_Fee}}"></td>
</tr>
@endforeach
答案 0 :(得分:1)
这将完成工作
视图
@foreach($members as $member)
<tr>
<td class="text-right">
<input type="text" style="padding-right: 8px;padding-left: 8px;" name="id[{{$member->id}}]" id="id">{{$member->id}}</td>
<td><input type="text" id="Channel" name="Channel[{{$member->id}}]" class="form-control" value="{{$member->Channel}}"></td>
<td><input type="text" id="Posts" name="Posts[{{$member->id}}]" class="form-control" value="{{$member->Posts}}"></td>
<td><input type="text" id="Monthly_Admin_Fee" name="Monthly_Admin_Fee[{{$member->id}}]" class="form-control" value="{{$member->Monthly_Admin_Fee}}"></td>
<td><input type="text" id="Legal_Fee" name="Legal_Fee[{{$member->id}}]" class="form-control" value="{{$member->Legal_Fee}}"></td>
<td><input type="text" id="Valuation_Fee" name="Valuation_Fee[{{$member->id}}]" class="form-control" value="{{$member->Valuation_Fee}}"></td>
<td><input type="text" id="Mortgage_Risk_Fee" name="Mortgage_Risk_Fee[{{$member->id}}]" class="form-control" value="{{$member->Mortgage_Risk_Fee}}"></td>
</tr>
@endforeach
控制器
foreach ($request->all() as $key => $data ) {
$input = [
'id' => $data['id'][$key],
'Channel' => $data['Channel'][$key],
'Posts' => $data['Posts'][$key],
'Monthly_Admin_Fee' => $data['Monthly_Admin_Fee'][$key],
'Legal_Fee' => $data['Legal_Fee'][$key],
'Valuation_Fee' => $data['Valuation_Fee'][$key],
'Mortgage_Risk_Fee' => $data['Mortgage_Risk_Fee'][$key],
];
DB::table('membership')->where('id',$key)->update($input);
}
答案 1 :(得分:1)
这是你的问题
onChildrenChanged
for($i = 0; $i <= count($data['id']); $i++) {`
它的数组数组,它没有带键$data
'id'
甚至更好
for($i = 0; $i <= count($data); $i++) {
修改
对不起,我已经想念你了。因为你的方法。
我能建议你这个吗?
foreach ($data as $row) {
$desired_keys = [
'Channel',
'Posts',
'Monthly_Admin_Fee',
'Legal_Fee',
'Valuation_Fee',
'Mortgage_Risk_Fee',
];
$input = array_only($row, $desired_keys);
BD::table('membership')->where('id', $row['id'])->update($input)
}
然后在控制器中
@foreach($members as $i => $member)
<tr>
<td class="text-right">
<input type="text" style="padding-right: 8px;padding-left: 8px;" name="members[{{ $i }}][id]" id="id">{{$member->id}}
</td>
<td>
<input type="text" id="Channel" name="members[{{ $i }}][Channel]" class="form-control" value="{{$member->Channel}}">
</td>
<td>
<input type="text" id="Posts" name="members[{{ $i }}][Posts]" class="form-control" value="{{$member->Posts}}">
</td>
<td>
<input type="text" id="Monthly_Admin_Fee" name="members[{{ $i }}][Monthly_Admin_Fee]" class="form-control" value="{{$member->Monthly_Admin_Fee}}">
</td>
<td>
<input type="text" id="Legal_Fee" name="members[{{ $i }}][Legal_Fee]" class="form-control" value="{{$member->Legal_Fee}}">
</td>
<td>
<input type="text" id="Valuation_Fee" name="members[{{ $i }}][Valuation_Fee]" class="form-control" value="{{$member->Valuation_Fee}}">
</td>
<td>
<input type="text" id="Mortgage_Risk_Fee" name="members[{{ $i }}][Mortgage_Risk_Fee]" class="form-control" value="{{$member->Mortgage_Risk_Fee}}">
</td>
</tr>
@endforeach
这种方法更漂亮,不是吗?
答案 2 :(得分:0)
您无法使用insert()
方法等一个查询更新具有不同数据的多个行。
当所有需要更新的行的数据相同时,您可以使用:
DB::table('membership')
->whereIn('id', [1,2,3,4])
->update(['Channel' => 'your-value', ..]);
否则你需要使用foreach
,如果这需要很长时间来看看排队(https://laravel.com/docs/master/queues)
答案 3 :(得分:0)
基本上我不知道您的数据,我会说删除[ID]
。
您不需要知道ID。从这个函数的任何地方删除它,
编辑
只需将您的查询更改为: DB :: table('membership')其中(id,$ data ['id'] [$ i]) - &gt; update($ input);
这将使用当前id获取记录并更新它。
答案 4 :(得分:0)
错误在于视野。您忘记将值插入ID输入。
<input type="text" style="padding-right: 8px;padding-left: 8px;" name="id[]" id="id" value="{{$member->id}}">{{$member->id}}</td>
答案 5 :(得分:0)
你可以按照例子:
$data_upate = array(
array(
'field1'=>'value1',
'field2'=>'value2',
...
),
array(
'field1'=>'value1',
'field2'=>'value2',
...
),
);
//列出要更新的记录的记录//
$ a_ids = array(....);
DB ::表( 'TABLE_NAME') - &GT;其中( 'ID',$ a_ids) - &GT;更新($ data_update);