Как можно декодировать данные Json в реляционной таблице laravel 5.8

#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 напрямую без необходимости его декодирования