如何解码关系表laravel 5.8中的Json数据

时间:2019-03-29 09:14:53

标签: json laravel parsing laravel-blade

我有一个表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 [▶]

此数据是问答。我有这样的看法。我有个功能展示和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 :(得分:0)

您需要解码特定列而不是整个对象,请尝试:

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

随心所欲地玩这个游戏。

答案 1 :(得分:0)

您可以使用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])

(我不知道pemeliharaanpertanyaan是什么意思,所以也许是一团糟,但是您应该将json转换为值传递给数组

结果将是这样显示的所有json数据的递归列表:

Question1 : Periksa kondisi kelistrikan dan kabel
Answer1 : false
Question2 : Periksa kondisi kabel dan tempat sambungan
Answer2 : false