Отображение данных типа json из MySQL в Laravel - PullRequest
0 голосов
/ 14 октября 2018

У меня проблемы с отображением данных из моего MySQL столбца json-типа.

Контроллер

public function index()
    {
        $layaways = Layaway::orderBy('created_at', 'desc')->get();

        $layaways = paginate($layaways);

        return view('admin/layaway.index')->with('layaways', $layaways);
    }

Просмотр

<tbody>
    @foreach ($layaways as $layaway)
         <tr data-toggle="collapse" data-target="#id{{ $layaway->transaction_id }}">
              <td>{{ $layaway->transaction_id }}</td>
         </tr>

         <td colspan="4" id="id{{ $layaway->transaction_id }}" class="collapse p-0" data-parent="#accordion">
              <div class="row ml-0 mr-0">
                   <div class="card col-md-6 pr-0 pl-0">
                       <div class="card-header text-center">
                          Layaway Products
                       </div>
                       <div class="card-body m-5">
                          @foreach ($layaway->selected_products as $product)
                             {{ $product->id }}
                          @endforeach
                       </div>
                   </div>
              </div>
          </td>
      @endforeach
</tbody>

Пример данных из dd ()

sample data from dd

Пример данных из dd () после Tharaka Dilhsanпредлагается

enter image description here

Ошибка получена

Invalid argument supplied for foreach()

Вопрос

  • Как правильно отобразить данные json, которые находятся внутри поля атрибута?

Ответы [ 4 ]

0 голосов
/ 14 октября 2018

Я получил его после проб и ошибок с огромными исследованиями.

Я только что обернул $layaway->selected_products, используя json_decode().Спасибо.

От этого

<div class="card-body m-5">
    @foreach ($layaway->selected_products as $product)
       {{ $product->id }}
    @endforeach
</div>

К этому

<div class="card-body m-5">
    @foreach (json_decode($layaway->selected_products) as $product)
       {{ $product->id }}
    @endforeach
</div>
0 голосов
/ 14 октября 2018

Вы можете попробовать это:

return view('admin/layaway.index')->with('layaways', $layaways->toArray());
0 голосов
/ 14 октября 2018

Ваш внутренний массив рассматривается как строка, поэтому, пожалуйста, преобразуйте внутреннюю строку в массив, а затем попытайтесь надеяться, что она работает.

0 голосов
/ 14 октября 2018

Вы можете использовать «Casting» в «Eloquent Model»

Layway Model

class Layway extends Model
{
    protected $casts = [
        'selected_peoducts' => 'array'
    ];
}

, это автоматически приведёт ваши данные «selecred_products» к массиву.

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