Laravel 4.1从响应中删除了枢轴属性

时间:2014-01-02 16:44:29

标签: laravel-4

我正在使用laravel 4.1构建一个api。我有一个工作正常的表。但响应来自我不想要的枢轴属性。正如您将在我的示例中看到的,我必须有两个表名:trip和users。我不希望在响应中看到数据透视表属性。这是一个例子:

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

这是我的用户模型:

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

这是我的旅行模式:

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

这是我的控制者:

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

这是我的路线:

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

有什么方法可以使用laravel删除pivot属性,或者我必须使用php?

4 个答案:

答案 0 :(得分:32)

使用模型的$hidden属性,您可以向其添加属性或关系,并且数据透视表基本上充当关系。

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

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

答案 1 :(得分:0)

如果您想从响应中删除任何一列,那么您可以尝试这样的事情:

在你的模特:

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

这样您只需要获得属性。

答案 2 :(得分:0)

您可以将其添加到“隐藏”阵列中。在模型页面上

protected $hidden = [
    'pivot'
];

答案 3 :(得分:0)

如上所述,您可以通过将以下内容添加到相关模型中,从响应中删除数据透视表属性。

    protected $hidden = [
        'pivot'
    ];

此外,如果要从数据透视图中选择要显示在相关用户对象中的特定字段,可以将其添加到控制器中。当您使用上述代码段隐藏数据透视信息时,此方法也适用。

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

,您会收到一些将trip_id添加到用户对象的对象。

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