如何使用laravel从json删除数据透视关键词?

时间:2018-11-07 08:04:27

标签: php laravel laravel-5.6

我正在尝试从具有透视表games的{​​{1}}表中获取数据。下面的代码对我来说很好用

user_games

我正在关注json响应

$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

有人可以指导我如何解决此问题。我将不胜感激。非常感谢

3 个答案:

答案 0 :(得分:0)

您可以将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));

答案 1 :(得分:0)

您可以覆盖User方法中调用的jsonSerialize模型的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;
}

答案 2 :(得分:0)

您可以在数据透视模型上利用hiddenappends重新构造返回的数据。

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

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

Reference for hidden

Reference for appends