【问题标题】:How to return and display json data saved to database laravel如何返回并显示保存到数据库laravel的json数据
【发布时间】:2018-10-08 18:31:08
【问题描述】:

在 laravel 中,我将输入数据保存到 json 以将其存储在数据库中,但无法再次显示数据。

我正在保存和更新控制器中显示的数据:

public function store(Request $request)
{   
    $this->validate(request(), [
        'start' => 'required',
        'end' => 'required'
    ]);

    if (Auth::check()) {

        Myroutes::create([ //posting to myroutes table
            'user_id' => Auth::user()->id,
            'start' => $request->start,
            'end' => $request->end,
            'waypoints' => json_encode($request->waypoints)
        ]);
        return redirect('/my-saved-routes');
    } else {
        return redirect('/login');
    }
}

 public function update(Request $request, $id)
{    
     Myroutes::where('myroute_id', $id)
    ->update(['start' => $request->input('start'),
             'end'=>$request->input('end'),
             'waypoints'=>$request->input('waypoints')]
            );
     return redirect('/my-saved-routes');
}

正在将数据输入到showing.blade 中的各个输入字段中:

<div id="dynamicInput" class="form-group">
                    <label>Additional Destinations</label>
                    <input type="text" name="waypoints[]" class="form-control" autocomplete="on">
                </div>

                <input type="button" class="btn btn-secondary" value="+" onClick="addInput('dynamicInput');" style="padding:0 10px;">               

并且正在edit.blade中输出:

<div id="dynamicInput" class="form-group">
                                    <label>Additional Destinations</label>
                                    <input type="text" name="waypoints" class="form-control" autocomplete="on" value="{{ $myroute->waypoints }}">
                                </div>

{{ $myroute->waypoints }} 显示整个 json 数组,而 {{ $myroute->waypoints[0] }}" 仅显示第一个值,即 [

数据库结构供参考: database

输出当前显示为: output

希望它如下所示: expected

【问题讨论】:

  • 您期望什么样的格式?对象还是数组?
  • 一个数组,所以我可以使用 {{ $myroute->waypoints[0] }} 来指定要打印的那个。在问题中添加了图像以进一步解释@devk

标签: arrays database laravel laravel-5


【解决方案1】:

由于您使用json_encode() 对其进行编码,因此您应该使用json_decode() 对其进行解码:

json_decode($myroute->waypoints, true)

将第二个参数设置为 true 会将其转换为数组而不是对象,因此您可以这样做:

{{ json_decode($myroute->waypoints, true)[0] }}

另外,与此问题无关,但您没有在 update() 方法中对其进行编码,这将提供非常不一致的结果。

【讨论】:

  • json_decode 应该放在哪里?在 web.php 中 - Route::get('/my-saved-routes/edit/{myroute_id}', function ($myroute_id) { $myroute = DB::table('myroutes')-&gt;where('myroute_id', $myroute_id)-&gt;first(); return view('myroutes.edit', compact('myroute')); });
  • 无论您想在数组中的何处获取$myroute-&gt;waypoints。可能是一种观点,但我不知道
  • 噢,是的,谢谢,这行得通!只需要弄清楚如何显示正确数量的输入字段以匹配数组。
【解决方案2】:

您还可以使用 $casts 以“雄辩的方式”归档您的目标:

class Myroutes extends Model {

    /** @var array $casts */
    protected $casts = [
        'waypoints' => 'array'
    ];

}

$mMyroutes = Myroutes::create([
    'user_id' => Auth::user()->id,
    'start' => $request->start,
    'end' => $request->end,
    'waypoints' => $request->waypoints
]);

这种方式 $mMyroutes->航点总是作为数组处理并存储为 json。

官方文档:https://laravel.com/docs/5.6/eloquent-mutators#attribute-casting

【讨论】:

    猜你喜欢
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    相关资源
    最近更新 更多