Как удалить ключевое слово pivot из json с помощью laravel? - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь получить данные из таблицы games, которая имеет сводную таблицу user_games. Ниже код, если у меня хорошо работает

$UserGames = User::with(['games' => function ($query){
    $query->withPivot('highscore','level');
}])->find(request()->user()->id);

Я получаю следующий JSON-ответ

{
    "data": [
        {
            "id": 2,
            "name": "culpa",
            "type_id": 3,
            "created_at": "2018-10-30 11:23:27",
            "updated_at": "2018-10-30 11:23:27",
            "pivot": {
                "user_id": 2,
                "game_id": 2,
                "highscore": 702,
                "level": 3
            }
        }
    ]
}

Но я хотел удалить ключевое слово pivot из вышеупомянутого json и вытянуть сводную деталь в корень, как показано ниже моего желаемого ответа

{
    "data": [
        {
            "id": 2,
            "name": "culpa",
            "type_id": 3,
            "created_at": "2018-10-30 11:23:27",
            "updated_at": "2018-10-30 11:23:27",
            "user_id": 2,
            "highscore": 702,
            "level": 3
        }
    ]
}

Может ли кто-нибудь помочь мне, как решить проблему. Я был бы признателен. Большое вам спасибо

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

Вы можете переопределить метод User модели *1001*, который вызывается в методе toJson, это начальное тело метода:

public function jsonSerialize()
{
    return $this->toArray();
}

И вы можете сделать что-то вроде этого:

public function jsonSerialize()
{
    $attrs = $this->toArray();

    if (isset($attrs['pivot'])) {
        $attrs = array_merge($attrs, $attrs['pivot']);
        unset($attrs['pivot']);
    }

    return $attrs;
}
0 голосов
/ 07 ноября 2018

Вы можете использовать hidden и appends в сводной модели для реструктуризации возвращаемых данных.

class PivotModel extends model
{
    protected $hidden = ['pivot'];
    protected $appends = ['user_id'];

    public function getUserIdAttribute()
    {
        return $this->pivot->user_id;
    }
}

Ссылка для скрыто

Ссылка для Приложений

0 голосов
/ 07 ноября 2018

Вы можете преобразовать JSON в массив, а затем преобразовать его в JSON.

$UserGames = User::with(['games' => function ($query){
    $query->withPivot('highscore','level');
}])->find(request()->user()->id);

$UserGames = json_decode($UserGames, true);

$pivot = $UserGames['data'][0]['pivot'];

unset($UserGames['data'][0]['pivot']);

$UserGames = json_encode(array_merge($UserGames[0], $pivot));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...