【发布时间】:2020-01-15 16:07:32
【问题描述】:
我正在构建一个应用程序,其中有一列数据要序列化以存储在数据库中,因为我发现没有其他方法可以将数据存储为一个对象。我的数据输入复选框的表单如下所示。
<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();
顶部的图像是视图。如您所见,返回了序列化的数据。我浏览了这个论坛,但发布的建议都没有奏效。
这个页面甚至没有接近我想要做的。
https://laravel.com/docs/5.8/eloquent-serialization#date-serialization
这很接近,但没有分享什么是有效的,或者我不明白什么有效。
https://laracasts.com/discuss/channels/laravel/problem-to-unserialize-my-returned-value
更新:适合我的解决方案
我做了一些有帮助的改变,我已经完成了 98% 的工作。
这篇文章帮助了我。 Split string in Laravel Framework
我从这里更改了这一行
$care_plan = $request->input('careplan');
到这里
$patient->careplan = json_encode($request->input('careplan'));
这让我从这个数据库返回。
["nursecallweekly","nursecallbiweekly","nursecallmonthly"]
我使用这个嵌套循环来解析字符串。
@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
【问题讨论】:
-
unserialize 有什么问题?
-
aynber,反序列化对我不起作用,或者无法弄清楚反序列化($patient->careplan)的放置位置。这会引发很大的错误。所以我不得不回到数据的存储方式。我更改为 json_encode 以及下面提出的建议,作为使用 mutator 进行转换的答案。当字符串被带回时,这就是所有这些其他步骤被引入来渲染字符串的地方。