【问题标题】:How can Decode Json data in relational table laravel 5.8如何在关系表laravel 5.8中解码Json数据
【发布时间】: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

标签: json laravel parsing laravel-blade


【解决方案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' =&gt; $pemeliharaan-&gt;pertanyaan])

    (我不知道pemeliharaanpertanyaan 是什么意思,所以可能搞砸了,但您应该将转换为数组的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,不需要解码
    猜你喜欢
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 2020-05-03
    • 2019-11-06
    • 2020-01-07
    相关资源
    最近更新 更多