#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