返回json集合中的选定键

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

我在控制器的方法中有这些数据,你看到我删除了方法中的一些键:

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

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

并且api响应返回:

{
    "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"
                    }
                }
            ]
        }
    ]
}

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

php json laravel eloquent laravel-collection
2个回答
2
投票

您可以使用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');
});

0
投票

如果数据响应是通过存储过程进行的,那么在这种情况下,您需要将Pivot表数据存储在临时表中,并选择所需的键并在json中通过API显示它。

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