Laravel数组更新多行

时间:2017-05-16 06:47:30

标签: php laravel laravel-5 laravel-5.2

我已经做了大量的查看旧帖子但没有运气, 我正在尝试从单个表单更新表中的多个行,其中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

6 个答案:

答案 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);