Laravel 4.1 remove pivot attributes from response

Deadly 提交于 2019-12-04 16:28:04

问题


I am using laravel 4.1 to build an api. I have pivot a table which is working fine. But the response comes with pivot attributes which i don't want. as you will see in my example i have to two tables name: trips and users. I don't want to see pivot table attributes in my response. Here is the example:

[
    {
        "id": 140,
        "name_first": "hasan",
        "name_last": "hasibul",
        "profile_image": "/assets/images/default-profile-img.png",
        "created_at": "2013-09-18 08:19:50",
        "last_login": "2013-12-26 11:28:44",
        "status": "active",
        "last_update": "2013-10-15 13:40:47",
        "google_refresh_token": null,
        "is_admin": 1,
        "updated_at": null,
        "pivot": {
            "trip_id": 200,
            "user_id": 140
        }
    }

This is my User Model:

public function trips(){
        return $this->belongsToMany('Trip');
    }

This is my trip model:

public function users(){
        return $this->belongsToMany('User');
    }

This is my controller:

public function index($tripId)
    {
        $userCollection = Trip::find($tripId)->users;
        return $userCollection;
    }

This is my route:

//get all the users belongs to the trip
Route::get('trips/{tripId}/users', array(
    'as' => 'trips/users/index',
    'uses' => 'TripUserController@index'
));

is there any way i can remove pivot attributes using laravel or i have to use php ?


回答1:


Use the $hidden property of the model, you can add attributes or relations to it and the pivot is basicly acts as a relation.

class Foo extends Eloquent
{
    protected $hidden = array('pivot');

    public function bars()
    {
        return $this->belongsToMany('Bar');
    }
}



回答2:


If you want to remove just any one column from the response, then you can try something like this:

In you Model:

public function toArray()
{
    $attributes = $this->attributesToArray();
    $attributes = array_merge($attributes, $this->relationsToArray());
    unset($attributes['pivot']['user_id']);
    return $attributes;
}

This way you will get only attribute required.




回答3:


You can add it to your "hidden" array. At Model page

protected $hidden = [
    'pivot'
];



回答4:


As mentioned above you can remove the pivot attribute from the response, by adding the following to the related model.

    protected $hidden = [
        'pivot'
    ];

Moreover, in case you want to select specific fields from the pivot to be displayed in the related user object you can add this to your controller using Laravel 5.8. This works also when you hide the pivot information with the above code snippet.

public function index(Trip $trip)
{
    return $trip->users()->select(['trip_id'])->paginate();
}

and you will receive something objects where the trip_id is added to the user object.

    {
        "data": [
         {
                "id": 140,
                "trip_id": 200,
                "name_first": "hasan",
                "name_last": "hasibul",
                "profile_image": "/assets/images/default-profile-img.png",
                "created_at": "2013-09-18 08:19:50",
                "last_login": "2013-12-26 11:28:44",
                "status": "active",
                "last_update": "2013-10-15 13:40:47",
                "google_refresh_token": null,
                "is_admin": 1,
                "updated_at": null,
                "pivot": {
                    "trip_id": 200,
                    "user_id": 140
                }
            }
        ]
    }


来源:https://stackoverflow.com/questions/20887530/laravel-4-1-remove-pivot-attributes-from-response

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!