Как можно декодировать данные Json в реляционной таблице laravel 5.8 - PullRequest
1 голос
/ 29 марта 2019

У меня есть таблица Pemeliharaan с колонкой pertanyaan. В этом столбце у меня есть данные JSON, как это: //

Я обновляю свой вопрос, это не показывает массив для пользователя реляционной таблицы и 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 [▶]

Это данные вопроса и ответа. И у меня есть такая точка зрения. У меня есть функция шоу и 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)

Я не знаю, как декодировать и как просматривать в клинке

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Вы можете использовать мутатор 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 AND pertanyaan, так что, возможно, все испортилось, но вы должны передать свой json, преобразованный в массив, как значение

Результатом будет рекурсивный список всех ваших данных json, представленных таким образом:

Question1 : Periksa kondisi kelistrikan dan kabel
Answer1 : false
Question2 : Periksa kondisi kabel dan tempat sambungan
Answer2 : false
0 голосов
/ 29 марта 2019

Вам нужно декодировать конкретный столбец, а не весь объект, попробуйте:

public function showQuestion($id)
{
    $pemeliharaan = Pemeliharaan::find($id);
    $pemeliharaan->pertanyaan = json_decode($pemeliharaan->pertanyaan,true);

    return view('users.view_question',compact('pemeliharaan'));
}

И отметьте в viewQuestion , если $pemeliharaan равно нулю или нет:

@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

Играйте с этим, как хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...