我正在尝试从具有透视表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
有人可以指导我如何解决此问题。我将不胜感激。非常感谢
答案 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)
您可以在数据透视模型上利用hidden
和appends
重新构造返回的数据。
class PivotModel extends model
{
protected $hidden = ['pivot'];
protected $appends = ['user_id'];
public function getUserIdAttribute()
{
return $this->pivot->user_id;
}
}