如何正确 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