具有多对多Eloquent关系的单个属性的数组

问题描述 投票:0回答:1

我创建了一个模型NearMiss,它与Type模型有多对多的关系。当存在对特定NearMiss的GET请求时,我希望将数组附加到JSON输出,该输出具有属于name实例的所有Type实例的NearMiss属性。

我可以将一个类型数组附加到输出中,但我想摆脱所有附加信息(例如数据透视信息)。

GET请求/nearmisses/{nearmiss}执行以下方法:

public function show($id) 
    {
        try {
            $nearmiss = NearMiss::findOrFail($id)->first();
            $nearmiss->types->makeHidden(['id', 'created_at', 'updated_at']);
            return response()->json($nearmiss);
        } catch(ModelNotFoundException $e) {
            abort(400, 'Model not found');
        }
    }

NearMiss模型具有以下类型关系:

public function types() 
    {
        return $this->belongsToMany('App\Type', 'near_miss_type', 'near_miss_id', 'type_id');
    }

当前输出:

{
    "id": 1,
    "location_long": "0.0000000",
    "location_lat": "0.0000000",
    "employee_id": 1,
    "created_at": "2019-02-11 16:38:24",
    "updated_at": "2019-02-11 16:38:24",
    "types": [
        {
            "id": 1,
            "name": "Brandgevaar"
            "created_at": "2019-02-11 16:33:25",
            "updated_at": "2019-02-11 16:33:25",
        },
        {
            "id": 2,
            "name": "Slipgevaar",
            "created_at": "2019-02-11 16:34:12",
            "updated_at": "2019-02-11 16:34:12",
        }
    ]
}

我知道我可以删除其他属性(例如id,created_at,updated_at),但这仍然留给我一个Type实例数组(只有一个名称属性)。当我尝试flatten()时,我收到一个错误,即flatten()不能用于BelongsToMany关系。

期望的输出:

{
    "id": 1,
    "location_long": "0.0000000",
    "location_lat": "0.0000000",
    "employee_id": 1,
    "created_at": "2019-02-11 16:38:24",
    "updated_at": "2019-02-11 16:38:24",
    "types": [
        "Brandgevaar", "Slipgevaar"
    ]
}

请有人帮助我获得所需的输出。

laravel eloquent
1个回答
0
投票

您可以手动加载类型并使用pluck()函数仅获取每种类型的名称。

$nearmiss->types = $nearmiss->types()->pluck('name');

但是我不确定这是否会干扰Eloquent的神奇属性。

© www.soinside.com 2019 - 2024. All rights reserved.