Laravel 4.1 удаляет атрибуты поворота из ответа

Я использую laravel 4.1 для сборки api. У меня есть таблица, которая работает нормально. Но ответ приходит со сводными атрибутами, которых я не хочу. как вы увидите в моем примере, у меня есть две таблицы: поездки и пользователи. Я не хочу видеть атрибуты сводной таблицы в своем ответе. Вот пример:

[
    {
        "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' => '[email protected]'
));

Есть ли способ удалить атрибуты с использованием laravel или мне нужно использовать php?

Ответ 1

Используйте свойство $hidden модели, вы можете добавить к нему атрибуты или отношения, а опорная точка в основном действует как отношение.

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

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

Ответ 2

Если вы хотите удалить только один столбец из ответа, вы можете попробовать что-то вроде этого:

В вас Модель:

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

Таким образом вы получите только требуемый атрибут.

Ответ 3

Вы можете добавить его в свой "скрытый" массив. На странице модели

protected $hidden = [
    'pivot'
];

Ответ 4

Как упоминалось выше, вы можете удалить атрибут pivot из ответа, добавив следующее в связанную модель.

    protected $hidden = [
        'pivot'
    ];

Кроме того, в случае, если вы хотите выбрать определенные поля в сводной области для отображения в связанном пользовательском объекте, вы можете добавить это в свой контроллер, используя Laravel 5.8. Это работает также, когда вы скрываете сводную информацию с помощью приведенного выше фрагмента кода.

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