在 laravel 5.6 中更新 json 数据

Posted

技术标签:

【中文标题】在 laravel 5.6 中更新 json 数据【英文标题】:Update json data in laravel 5.6 【发布时间】:2019-02-01 15:37:27 【问题描述】:

问题:需要更新地址名称字段中的json数据。

图书控制器:

public function edit(Book $book)

    return view('books.edit',compact('book'));

public function update(Request $request, Book $book)

    $book->update($request->all());
    return redirect()->route('books.index')->with('success','Book updated successfully');

edit.blade.php

 <form action=" route('books.update',$book->id) " method="POST">
        @csrf
        @method('PUT')
        <div class="row">
            <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>Name:</strong>
                    <input type="text" name="name" value=" $book->name " class="form-control" placeholder="Name">
                </div>
            </div>


            <?php $num=1 ?>

        @foreach($book->address as $value)

                <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>Address<?php echo  $num ?> :</strong>
                    <input type="text" name="addr" value=" $value['address'] " class="form-control" placeholder="Address">
                </div>
            </div>
                <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>Country <?php echo  $num ?>:</strong>
                    <input type="text" name="country" value=" $value['country']" class="form-control" placeholder="Country">
                </div>
            </div>
                <?php  $num++ ?>
            @endforeach
                <div class="col-xs-12 col-sm-12 col-md-12 text-center">
                <button type="submit" class="btn btn-primary">Submit</button>
            </div>
        </div>
    </form>

如何更新 json 数据?

我正在使用 postgreSQL ................................... ..................................................... .............................谢谢

【问题讨论】:

【参考方案1】:

@Kristly D'sena,将输入名称属性“addr”替换为“addr[]”为数组的名称,然后只有这样你才能在post方法中获得数组格式的多地址,然后将它们转换使用 json_encode

将字段地址放入 json

在你的 edit.blade.php 文件中替换下面的脚本。

 @foreach($book->address as $value)
                <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>Address<?php echo  $num ?> :</strong>
                    <input type="text" name="addr[]" value=" $value['address'] " class="form-control" placeholder="Address">
                </div>
            </div>
                <div class="col-xs-12 col-sm-12 col-md-12">
                <div class="form-group">
                    <strong>Country <?php echo  $num ?>:</strong>
                    <input type="text" name="country[]" value=" $value['country']" class="form-control" placeholder="Country">
                </div>
            </div>
                <?php  $num++ ?>
            @endforeach

在 bookcontroller.php 文件中更改更新方法

public function update(Request $request, Book $book)


    $inputs = $request->all();
    $addr = ($request->addr);
    $country = ($request->country);
    $final_address = array();
    foreach ($addr as $key => $value) 
        $final_address[] = array('address' => $value, 'country'=>$country[$key] );
    
    $inputs['address'] = json_encode($final_address);        
    $book->update($inputs);

    return redirect()->route('books.index')->with('success','Book updated successfully');

这样你就可以更新地址字段的json数据了。

【讨论】:

我有这种 json ["address": "gdfg", "country": "fd", "address": "dg", "country": "df" , "address": "gd", "country": "dfg"] 在地址栏中 @KristlyD'sena 我已根据您的 json 格式更新了我的答案,请尝试使用最新的答案,希望更新后的答案能解决您的问题。 异常 :( InvalidArgumentException 尾随数据 @KristlyD'sena,我不知道您存储完整地址详细信息的表列名,所以我假设列名“地址”并保留 $inputs['address'],Hense 替换"$inputs['address']" 键中的数据库列名。前任。如果您的列名是表中的“address_detail”,则 $inputs['address_detail'] = $final_address.我希望你能明白我的意思。 :) 列名是地址,当我使用 var_dump($inputs['address']);这个,然后错误来了 ErrorException (E_NOTICE) Undefined index: address and array (size=5) and var_dump($inputs);给出 '_method' => string 'PUT' (length=3) 'name' => string 'kajal' (length=5) 'addr' => array (size=3) 0 => string 'gdfg' (length= 4) 1 => 字符串 'dg' (length=2) 2 => 字符串 'gd' (length=2) 'country' => 数组 (size=3) 0 => 字符串 'fd' (length=2) 1 => 字符串 'df' (length=2) 2 => 字符串 'dfg' (length=3)

以上是关于在 laravel 5.6 中更新 json 数据的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.6 API 资源未显示关系数据

作曲家在将 laravel 更新到 5.6 时卡在“发生了变化,再次查看所有规则”

从5.5作曲家更新到laravel 5.6失败

如何在 Laravel 框架中降级? (5.6 至 5.5)

更新用户配置文件 Laravel 5.6

Laravel 5.6:升级 composer.json 后调用未定义的方法 ...\Store::getToken()