Return 已选择 json 集合中的键

Return selected keys in collection for json

如您所见,我在控制器方法中有此数据我在方法中删除了一些键:

$foods = Food::get()->map(function($value){
  return collect($value->toArray())->except('pivot', 'deleted_at', 'created_at', 'updated_at');
});

return HttpHelpers::sendJsonData($foods, 200);

和 api 响应 return 是这样的:

{
    "success": true,
    "data": [
        {
            "id": 1,
            "title": "food1",
            "default_price": 2353465456,
            "main_meal": 1,
            "labels": [
                {
                    "id": 1,
                    "title": "type1",
                    "type": "food",
                    "created_at": "2018-08-23 03:55:33",
                    "updated_at": "2018-08-23 03:55:33",
                    "pivot": {
                        "labelable_id": 1,
                        "label_id": 1,
                        "labelable_type": "App\Models\Panel\Food"
                    }
                }
            ]
        },
        {
            "id": 2,
            "title": "food2",
            "default_price": 1000,
            "main_meal": 0,
            "labels": [
                {
                    "id": 1,
                    "title": "type2",
                    "type": "food",
                    "created_at": "2018-08-23 03:55:33",
                    "updated_at": "2018-08-23 03:55:33",
                    "pivot": {
                        "labelable_id": 2,
                        "label_id": 1,
                        "labelable_type": "App\Models\Panel\Food"
                    }
                }
            ]
        }
    ]
}

现在我的问题是我不想 return 一些键,比如枢轴中的 labalable_id 和 labelable_type 以及标签中的 created_at,请给我最好的方法

如果数据响应来自存储过程,那么在这种情况下,您需要将 Pivot table 数据存储在临时的 table 和 select 所需的键中在 json.

中通过 API 要求并显示它

您可以使用 makeHidden 方法将数据隐藏到 JSON。还没有尝试过这段代码,但我认为它应该可以工作。

https://laravel.com/docs/5.6/eloquent-serialization#hiding-attributes-from-json

$foods = Food::get()->map(function($value){
    foreach($value->labels as $label){
        $label = $label->makeHidden(['created_at']);
        $label->pivot = $label->pivot->makeHidden(['labelable_id', 'labelable_type']);
    }
    return collect($value->toArray())->except('pivot', 'deleted_at', 'created_at', 'updated_at');
});