JSON 的 Laravel 连接关系

问题描述

我在 Laravel 中使用 Eloquent Relationship 将我的数据输出到 JSON。当我使用 Eloquent Relations 时,它们在 JSON 中显示一个对象,但我只需要带有变量的 JSON 输出,而没有对象或 json,如下所示:

   {
    "id": 1,"name": "Status changed","history_id": null,"admin_id": 4,"created_at": "2021-05-21T16:10:08.000000Z","updated_at": "2021-04-21T16:10:08.000000Z","type_id": 2,"comment": "Horoshiy Specialist","result_id": 2,"result_comment": "Prowerili anketu i obrazowanie","start_time": null,"end_time": null,},

而不是这个(LARVEL 中一对多 toJSON 关系的结果):

 $activity = Activity::find(1)->load('history')->toJSON();

结果:

{
    "id": 1,"history": [
        {
            "id": 1,}
    ]
},

任何想法如何做到这一点?我可以使用 DB join () 来做到这一点,但是有没有办法使用 Eloquent 做到这一点?此外:

 $activity = \App\Models\Activity::find(1)
 ->join('activity_history','activity_history.id','=','activities.history_id')->select('*')->get()
 ->toJSON();

因为这不是最好的方法,因为我用的是列名和表名,我得去后面的DB看看

解决方法

您可以通过在获得该结果时展平数组来解决此问题。让我们假设您 $object->history 使用历史关系获得结果,然后简单地执行:

Arr::dot($object->history);

所以你会得到一个像这样的数组:

{
    "id": 1,"name": "Status changed","history_id": null,"admin_id": 4,"created_at": "2021-05-21T16:10:08.000000Z","updated_at": "2021-04-21T16:10:08.000000Z","history.id": 1,"history.type_id": 2,"history.comment": "Horoshiy Specialist","history.result_id": 2,"history.result_comment": "Prowerili anketu i obrazowanie","history.start_time": null,"history.end_time": null,}