如何返回并显示保存到数据库laravel的json数据
Posted
技术标签:
【中文标题】如何返回并显示保存到数据库laravel的json数据【英文标题】:How to return and display json data saved to database laravel 【发布时间】: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 【参考方案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')->where('myroute_id', $myroute_id)->first(); return view('myroutes.edit', compact('myroute')); );
无论您想在数组中的何处获取$myroute->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
【讨论】:
以上是关于如何返回并显示保存到数据库laravel的json数据的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:如何查询包含json数据的表中的列并仅返回查询匹配的对象
Laravel - 从 JSON 数组创建对象以将其保存在 SQL 数据库中
如何使用 Laravel Eloquent 在数据库中保存 JSON 响应,我收到错误“数组到字符串转换”