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

Posted

技术标签:

【中文标题】如何在关系表laravel 5.8中解码Json数据【英文标题】:How can Decode Json data in relational table laravel 5.8 【发布时间】: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 【参考方案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,不需要解码

以上是关于如何在关系表laravel 5.8中解码Json数据的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.8多态关系`nullableMorphs`不起作用

如何在 laravel 5.8 中合并两个 sql 表

如何在 Laravel 5.8 中获取关注用户的帖子

如何在 Laravel 中解码 JSON 对象

我如何很好地解码Laravel失败的工作JSON

Laravel 5.8 中 hasMany 关系的条件