Как вернуть и отобразить данные json, сохраненные в базе данных laravel - PullRequest
0 голосов
/ 28 апреля 2018

В 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');
}

Данные вводятся в отдельные поля ввода в display.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]}} "показывает только первое значение, которое [

Структура базы данных для справки: база

Вывод, отображаемый в данный момент как: выход

Хотите, чтобы это выглядело следующим образом: ожидается

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Вы также можете использовать $ cast для архивирования своей цели «красноречивым путем»:

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

0 голосов
/ 28 апреля 2018

Поскольку вы закодировали его с помощью json_encode(), вы должны декодировать его с помощью json_decode():

json_decode($myroute->waypoints, true)

Установка 2-го аргумента в значение true преобразует его в массив вместо объекта, поэтому вы можете сделать:

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

Также не имеет отношения к этому вопросу, но вы не кодируете его в своем методе update(), который даст очень противоречивые результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...