Проблема с извлечением массива формата JSON из SQL (Laravel)

#mysql #sql #arrays #json #laravel

#mysql #sql #массивы #json #laravel

Вопрос:

Я здесь прошу о помощи.

Я думал о сохранении массивов JSON в столбцах MySQL и получении их данных.

Дело в том, что я пока не знаю, как это сделать.

Я разработал таблицу под названием employees со следующими полями:

id: основной идентификатор json: где сохраняется массив json

Это выглядит примерно так:

введите описание изображения здесь

Что мне нужно, так это выполнить цикл (итерацию) по массиву в поле json. Я думаю, что я сделал это, чтобы получить данные с помощью этого кода:

 public function testjson() {

    $arr = DB::table('employees')
    ->where('json->name', 'John')
    ->get();


    return view('desktop.templates.testing', [
        'data' => json_decode($arr, true),
    ]);
}
  

К моменту перехода к представлению я не могу получить доступ к этому массиву, сколько бы я ни пытался.

Я не знаю, как перебирать массив json в представлении, например, получить имя сотрудника и распечатать его. Я пытаюсь выполнить что-то вроде этого:

введите описание изображения здесь

Кто-нибудь может мне помочь? Есть ли лучший способ для этого? Заранее благодарю вас

Ответ №1:

Я думаю, вам следует использовать модель Laravel для такого рода вещей.

Например, создание модели php для User.php

и добавление следующего кода в модель

     protected $casts = [
    'json' => 'array',
];
  

Он автоматически выполнит все действия, указанные в поле.

  $data = User::where('json->name', 'Muhammad')->first();

 foreach ($data->json as $key => $value) {
     echo $value;
 }
  

Ответ №2:

Хорошо, ребята, итак, я наконец нашел решение того, чего я пытался достичь.

Контроллер выглядит следующим образом:

 $x = collect(json_decode(Test::all(), true)); // Test:all() gets all values from the table I was working on
return view('desktop.templates.testing', [
    'data' => $x
]);
  

В представлении теперь я могу легко выполнять итерации:

 @foreach ($data as $item)
    <h1>{{ $item['json']['name']}}</h1>
    <h2>Age: {{ $item['json']['age']}}</h2>
    <h2>City: {{ $item['json']['city'] }}</h2>
@endforeach
  

Конечный результат:

введите описание изображения здесь

Спасибо всем за ваши усилия. Надеюсь, это поможет большему количеству таких людей, как я, в будущем: D