Как правильно десериализовать один столбец данных в представлении laravel 5? - PullRequest
0 голосов
/ 15 января 2020

enter image description here

Я создаю приложение, в котором есть столбец данных, который я сериализирую для хранения в базе данных, потому что я не нашел другого способа сохранить данные как один объект. Моя форма, где данные вводятся, выглядит следующим образом.

    <div class="form-group form-check col-sm-6">
        </br>
        <label for="careplan">Care Plan</label></br>
        <input type ="checkbox" name="careplan[]" value="nursecallweekly">   Nurse call weekly</br>
        <input type ="checkbox" name="careplan[]" value="nursecallbiweekly">   Nurse call bi-monthly</br>
        <input type ="checkbox" name="careplan[]" value="nursecallmonthly">   Nurse call monthly</br>
        <input type ="checkbox" name="careplan[]" value="weightcheckdaily">   Weight check daily</br>
        <input type ="checkbox" name="careplan[]" value="weightcheckweekly">   Weight check weekly</br>
        <input type ="checkbox" name="careplan[]" value="lowerextremity">   Lower extremity edema status</br>
        <input type ="checkbox" name="careplan[]" value="dietaryreview">   Dietary review</br>
        <input type ="checkbox" name="careplan[]" value="fluidintake">   Fluid intake review</br>
        <input type ="checkbox" name="careplan[]" value="bloodpressure">   Blood pressure reading daily</br>
        <input type ="checkbox" name="careplan[]" value="bloodpressureweekly">   Blood pressure reading weekly</br>
        <input type ="checkbox" name="careplan[]" value="hypertensive">   Hypertensive symptoms check</br>
        <input type ="checkbox" name="careplan[]" value="ptinrweekly">   PT/INR weekly review</br>
    </div>

В плане обслуживания есть несколько пунктов, которые можно выбрать. Я сгруппировал их в массив и сериализовал массив, используя.

    //Create new Patient information
    $patient = new Patient;
    $patient->first_name = $request->input('first_name');
    $patient->last_name = $request->input('last_name');
    $patient->dob = $request->input('dob');
    $patient->contact_one = $request->input('contact_one');
    $patient->contact_two = $request->input('contact_two');
    $patient->care_giver_one = $request->input('care_giver_one');
    $patient->care_giver_two = $request->input('care_giver_two');
    $patient->enrollment_reason = $request->input('enrollment_reason');
    $care_plan = $request->input('careplan');
    $cp = serialize($care_plan);
    $patient->careplan = $cp;
    $patient->save();

Изображение сверху - это вид. Как видите, сериализованные данные возвращаются. Я просмотрел этот форум, и ни одно из опубликованных предложений не сработало.

десериализация данных в laravel

Эта страница даже близко не подходит к тому, что я пытаюсь сделать.

https://laravel.com/docs/5.8/eloquent-serialization#date -сериализация

Это было близко, но не поделились тем, что было сделано, что сработало, или я не понимаю, что сработало.

https://laracasts.com/discuss/channels/laravel/problem-to-unserialize-my-returned-value

ОБНОВЛЕНИЕ: РЕШЕНИЕ, КОТОРОЕ РАБОТАЛО ДЛЯ МЕНЯ

Я внес пару изменений, которые помогли, и я нахожусь на 98% пути туда.

Этот пост помог мне. Разделить строку в Laravel Framework

Я изменил эту строку с этой

  $care_plan = $request->input('careplan');

На эту

 $patient->careplan = json_encode($request->input('careplan'));

Это вернуло мне возврат из базы данных этого.

 ["nursecallweekly","nursecallbiweekly","nursecallmonthly"]

и я использовал этот вложенный l oop для разбора строки.

    @foreach(explode('","', $patient->careplan) as $plan)
         <li>{{$plan = Str::after($plan,'["')}}</li>
    @endforeach

Что отображается вот так.

   nursecallweekly
   nursecallbiweekly
   nursecallmonthly"]

Моя единственная проблема сейчас - это заключительная скобка.

Решение для задней скобки

   @foreach(explode('","', $patient->careplan) as $plan)
        @if(Str::contains($plan, '['))
        <li>{{ Str::after($plan,'["') }}</li>
        @else
            <li>{{ Str::before($plan,'"]') }}</li>
        @endif
    @endforeach

1 Ответ

1 голос
/ 15 января 2020

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

Используйте столбец JSON в вашей базе данных, назовем его careplan, затем в вашей модели сделайте:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Patient extends Model
{
    // ...

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

    // ...
}

Итак, теперь вы будете работать с элементом array, больше нет необходимости вручную сериализовывать / десериализовывать его из базы данных. Laravel преобразует array в json при сохранении и приведении обратно к array при получении значения из базы данных. Итак, теперь:

$patient = new Patient;
$patient->first_name = $request->input('first_name');
// ...
$patient->careplan = $request->input('careplan'); // Laravel will convert it to json for you
$patient->save();

Тогда вы увидите, что:

$patient = Patient::find(1);
dd($patient->careplan);

Возвращено к array.

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