#json #laravel #parsing #laravel-blade
#json #laravel #синтаксический анализ #laravel-blade
Вопрос:
У меня есть таблица Pemeliharaan
со столбцом pertanyaan
. В этом столбце у меня есть данные в формате json, подобные этому ://
Я обновляю свой вопрос, это dd, не показывающий массив в реляционной таблице user и 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 )
Я не знаю, как декодировать и как просматривать в blade
Комментарии:
1. но я хочу это использовать, я хочу показать свои данные json в колонке «pertanyaan», вы можете увидеть на странице treadh
2. Pemeliharaan — это таблица, pertanyaan — это столбец в таблице Pemeliharaan
Ответ №1:
Вам нужно декодировать конкретный столбец, а не весь объект, попробуйте:
public function showQuestion($id)
{
$pemeliharaan = Pemeliharaan::find($id);
$pemeliharaan->pertanyaan = json_decode($pemeliharaan->pertanyaan,true);
return view('users.view_question',compact('pemeliharaan'));
}
И проверьте в viewQuestion, имеет ли $pemeliharaan
значение null или нет :
@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 для преобразования поля в 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, преобразованный в array, в качестве значения
Результатом будет рекурсивный список всех ваших данных json, представленных таким образом :
Question1 : Periksa kondisi kelistrikan dan kabel
Answer1 : false
Question2 : Periksa kondisi kabel dan tempat sambungan
Answer2 : false
Комментарии:
1. если бы я использовал json mutator, мне не нужно было бы это кодировать / декодировать?
2. с помощью мутатора, когда вы выполняете $object->your_json_field, он будет преобразован в json напрямую без необходимости его декодирования