如何正确 json_decode 一个 Laravel 模型
How to properly json_decode a Laravel Model
在我正在开发的一个应用程序中,有一个报告功能需要处理一个巨大的报告然后显示它。因此决定报告将由作业处理,然后在准备就绪时呈现。
然而,问题就出在这里:
为了在准备好后呈现报告,我必须将报告数据存储在数据库中。此数据存储在报告 table 中名为 'values' 的字段中。
为了在该字段中存储所有报告数据,我使用 php 的 json_encode() (我知道 laravel 有一个 Model::toJson() 方法,但是数据不仅包括模型)。
我正在存储的数据如下所示:
$data = json_encode([
'subtitle' => $subtitle,
'logged_user' => $logged_user,
'packages' => $packages, //this is the model. I also tried doing $packages->toJson()
'columns' => $columns,
'colspan' => $colspan,
'request' => $request,
]);
当我尝试通过 json_decode() 访问数据时,对象变成了数组而不是模型对象;
我试过
$my_object = new App\Models\MyModel($model_decoded_array)
但是对象的一些属性和关系丢失了(不是全部,看图)。
所以我在这里有点迷路了。有什么方法可以将我的模型变成 Json、存储它们然后将它们恢复到原始状态?
感谢@TimLewis 在原始问题的评论中给出的答案
该问题的解决方案是在存储之前仅在模型上使用 php 的 serialize() 函数,如下所示:
$data = json_encode([
'subtitle' => $subtitle,
'logged_user' => $logged_user,
'packages' => serialize($packages),
'columns' => $columns,
'colspan' => $colspan,
'request' => $request,
]);
然后,在尝试再次访问它时使用 unserialize():
$values = json_decode($report->values,true); //$report is a model passed to this file from a controller
$packages = unserialize($values['packages']); // values is the field in the db where the json data was stored
在我正在开发的一个应用程序中,有一个报告功能需要处理一个巨大的报告然后显示它。因此决定报告将由作业处理,然后在准备就绪时呈现。
然而,问题就出在这里: 为了在准备好后呈现报告,我必须将报告数据存储在数据库中。此数据存储在报告 table 中名为 'values' 的字段中。 为了在该字段中存储所有报告数据,我使用 php 的 json_encode() (我知道 laravel 有一个 Model::toJson() 方法,但是数据不仅包括模型)。
我正在存储的数据如下所示:
$data = json_encode([
'subtitle' => $subtitle,
'logged_user' => $logged_user,
'packages' => $packages, //this is the model. I also tried doing $packages->toJson()
'columns' => $columns,
'colspan' => $colspan,
'request' => $request,
]);
当我尝试通过 json_decode() 访问数据时,对象变成了数组而不是模型对象; 我试过
$my_object = new App\Models\MyModel($model_decoded_array)
但是对象的一些属性和关系丢失了(不是全部,看图)。
所以我在这里有点迷路了。有什么方法可以将我的模型变成 Json、存储它们然后将它们恢复到原始状态?
感谢@TimLewis 在原始问题的评论中给出的答案
该问题的解决方案是在存储之前仅在模型上使用 php 的 serialize() 函数,如下所示:
$data = json_encode([
'subtitle' => $subtitle,
'logged_user' => $logged_user,
'packages' => serialize($packages),
'columns' => $columns,
'colspan' => $colspan,
'request' => $request,
]);
然后,在尝试再次访问它时使用 unserialize():
$values = json_decode($report->values,true); //$report is a model passed to this file from a controller
$packages = unserialize($values['packages']); // values is the field in the db where the json data was stored