Laravel数组更新多行 [英] Laravel array to update multiple rows

查看:41
本文介绍了Laravel数组更新多行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经浏览了大量旧帖子,但还没有运气,我正在尝试通过一种形式以ID为主键的形式更新表中的多行.

I've done a ton of looking through older posts and no luck yet, I'm trying to update multiple rows within a table from a single form with the ID being the primary key.

内容显示在看起来像电子表格的位置,用户可以在其中编辑多行.

The contents are being displayed in what looks like a spreadsheet where the user can edit multiple rows.

我得到一个未定义的索引:ID错误.

I'm getting an undefined index: ID error.

尽管有些不正确,但我正在使用的波纹管代码似乎真的很接近.

The code I'm using bellow seems really close though something isn't right.

如果任何人以前这样做过并且可以更正此代码,将不胜感激!

If anyones done this before and can correct this code your help would be greatly appreciated!

谢谢.

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

推荐答案

这是您的问题

for($i = 0; $i <= count($data['id']); $i++) {` 

$ data 是数组的数组,没有键为'id'

$data it's array of arrays, it doesn't have element with key '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)
}


编辑

对不起,我把你弄丢了.由于您的方法.
我可以建议你这个吗?

Sorry, I've missled you. Because of your approach.
Can I suggest you this one?

@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

然后进入控制器

protected function updateMultiple(Request $request)
{
    foreach($request->get('members', []) as $member) {
        DB::table('membership')->where('id', $member['id'])
            ->update(array_except($member, ['id']))
    }
}

这种方法更漂亮,不是吗?

This approach is much more pretty, isn't it?

这篇关于Laravel数组更新多行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆