如何在关系表laravel 5.8中解码Json数据
Posted
技术标签:
【中文标题】如何在关系表laravel 5.8中解码Json数据【英文标题】:How can Decode Json data in relational table laravel 5.8 【发布时间】:2019-08-20 04:37:54 【问题描述】:我有一个表 Pemeliharaan
,其中有一列 pertanyaan
。在本专栏中,我有这样的数据 json ://
我更新了我的问题,这是 dd 没有在关系表用户和 alat 上显示数组。如何?我需要在我的控制器中再次声明吗?我再次更新,现在我可以显示数据 json。如何解析?
Pemeliharaan #274 ▼
#table: "pemeliharaan"
#connection: "mysql"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:9 [▼
"id" => 42
"user_id" => 2
"alat_id" => 1
"pertanyaan" => array:8 [▼
"question1" => "Periksa kondisi kelistrikan dan kabel"
"answer1" => "false"
"question2" => "Periksa kondisi kabel dan tempat sambungan"
"answer2" => "false"
"question3" => "Periksa kondisi pencetakan (tinta dan kertas printer)"
"answer3" => "false"
"question4" => "Fix and squish bugs"
"answer4" => "false"
]
"catatan" => "22-11-1996"
"status" => "Harian"
"deleted_at" => null
"created_at" => "2019-03-28 15:41:44"
"updated_at" => "2019-03-28 15:41:44"
]
#original: array:9 [▶]
此数据为问答式。我有这样的看法。我有一个函数 show 和showQuestion
。
这样看
//View // no problem on here
<div class="box-body table-responsive no-padding">
<table class="table table-hover">
<tbody><tr>
<th>No</th>
<th>Nama Alat</th>
<th>Waktu</th>
<th>User Input</th>
<th>Action</th>
<th>Tanggal</th>
</tr>
@php
$no=0;
@endphp
@foreach ($pemeliharaan as $i)
<tr>
<td> ++$no </td>
<td> $i->alat->nama_alat</td>
<td> $i->status</td>
<td> $i->user->name</td>
<td> <a href="/user/show/question/ $i->id " > <span class="label label-primary">Lihat Data</span> </a></td>//in here redirect to showQuestion
<td> $i->created_at</td>
</tr>
@endforeach
</tbody></table>
</div>
viewQuestion
(如果我点击表格上的按钮将查看此数据)
@if( !is_null($pemeliharaan) )
<p> Laporan : $pemeliharaan->status </p>
<p> Tanggal : $pemeliharaan->created_at </p>
<p> Jenis Alat : $pemeliharaan->alat->nama_alat </p>
<p> User : $pemeliharaan->user->name </p>
<p> pertanyaan : $pemeliharaan['question1'] </p>// now showing anything
@endif
@foreach(json_decode($pemeliharaan, true) as $value)
pertanyaan : $value->pertanyaan['question1']
@endforeach //corect me at here
//this is I want to decode this json but i dont
知道我在做什么哈哈:(
这个观点(没有问答)是没有错误的。
这是我的控制器:
public function show()
$pemeliharaan = Pemeliharaan::with(['user','alat'])->get();
return view('users.view',['pemeliharaan' => $pemeliharaan]);
public function showQuestion($id)
$pemeliharaan = Pemeliharaan::find($id);
$pemeliharaan->pertanyaan = json_decode($pemeliharaan->pertanyaan,true);
return view('users.view_question',compact('pemeliharaan'));
出现这样的错误
未定义索引:alat(查看:/var/www/html/new/resources/views/users/view_question.blade.php)
我不知道如何解码和如何在刀片中查看
【问题讨论】:
但我想使用它,我想在 colomn "pertanyaan' 上显示我的 json 数据,你可以在踏上看到 Pemeliharaan is table , pertanyaan is colomn in Pemeliharaan Table's 【参考方案1】:你需要解码特定列,而不是整个对象,试试:
public function showQuestion($id)
$pemeliharaan = Pemeliharaan::find($id);
$pemeliharaan->pertanyaan = json_decode($pemeliharaan->pertanyaan,true);
return view('users.view_question',compact('pemeliharaan'));
如果$pemeliharaan
为空,请检查viewQuestion:
@if( !is_null($pemeliharaan) )
<p> Laporan : $pemeliharaan['status'] </p>
<p> Tanggal : $pemeliharaan['created_at'] </p>
<p> Jenis Alat : $pemeliharaan->alat->nama_alat </p>
<p> User : $pemeliharaan->user->name </p>
<p> pertanyaan : $pemeliharaan['question1'] </p>
@endif
要解析所有问题/答案,请尝试:
@foreach($pemeliharaan->pertanyaan as $key => $value)
pertanyaan : $key . ' - ' . $value
@endforeach
随心所欲地玩。
【讨论】:
【参考方案2】:您可以使用 json mutator 直接将字段转换为 json:
https://laravel.com/docs/5.8/eloquent-mutators#array-and-json-casting
protected $casts = [
'pertanyaan' => 'json',
];
如果你想展示它,我建议你这样做:
创建刀片文件components/json.blade.php
:
@if (!is_string($value))
@foreach($value as $key => $value)
<span class="ml-3"><strong> ucfirst($key) </strong> : @include('components.json')</span>
@endforeach
@else
$value
@endif
然后在你的主文件中:
@include('components.json', ['value' => $pemeliharaan->pertanyaan])
(我不知道pemeliharaan
和pertanyaan
是什么意思,所以可能搞砸了,但您应该将转换为数组的json 作为值传递
结果将是您以这种方式呈现的所有 json 数据的递归列表:
Question1 : Periksa kondisi kelistrikan dan kabel
Answer1 : false
Question2 : Periksa kondisi kabel dan tempat sambungan
Answer2 : false
【讨论】:
如果我使用 json mutator 我不需要编码/解码这个? 带一个mutator,当你在做$object->your_json_field的时候,会直接转换成json,不需要解码以上是关于如何在关系表laravel 5.8中解码Json数据的主要内容,如果未能解决你的问题,请参考以下文章