在laravel中我将输入数据保存到json以将其存储在数据库中,但无法再次显示数据。
我正在保存和更新控制器中显示的数据:
sudo -u ec2-user /home/myScript.sh
数据正在输入到shows.blade中的各个输入字段:
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');
}
正在edit.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;">
{{$ myroute-&gt; waypoints}}显示整个json数组和{{$ myroute-&gt; waypoints [0]}}&#34;仅显示第一个值[
数据库结构供参考: database
目前的输出显示为: output
希望它看起来如下所示: expected
答案 0 :(得分:0)
由于您使用json_encode()
对其进行了编码,因此您应使用json_decode()
对其进行解码:
json_decode($myroute->waypoints, true)
将第二个参数设置为true会将其转换为数组而不是对象,因此您可以执行以下操作:
{{ json_decode($myroute->waypoints, true)[0] }}
此外,与此问题无关,但您没有在update()
方法中对其进行编码,这会产生非常不一致的结果。
答案 1 :(得分:0)
您还可以使用$ 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-&gt;航点始终作为数组处理并存储为json。
官方文件:https://laravel.com/docs/5.6/eloquent-mutators#attribute-casting