如何将laravel关系结果合并到一个对象?
MyController.php
public function getUser($id) {
return TournamentUser::where('customer_id','=', $id)->with('user')->get();
}
MyModel.php
public function user() {
return $this->hasOne('App\Models\Customer','customer_id', 'customer_id');
}
返回结果:
[{ "id":1, "tournament_id":3, "customer_id":2016827550, "point":0, "user":{ "id":1, "customer_id":2016827550, "nickname":"OMahoooo" } }]
如预期的查询将用户部分返回为数组,但我希望结果如下:
[{ "id":1, "tournament_id":3, "customer_id":2016827550, "point":0, "nickname":"OMahoooo" }]
仅获取没有用户数组的昵称部分。我希望你能理解我。 对不起我的英语,祝你有愉快的一天
答案 0 :(得分:1)
您可以使用map()
方法加载数据并手动重新映射。我刚刚测试了这段代码,它与hasOne()
关系完美配合:
$users = TournamentUser::where('customer_id', $id)->with('user')->get();
$users->map(function ($i) {
$i->nickname = $i->user->nickname; // Set related nickname.
unset($i->user); // Delete user data from the collection.
return $i;
});
或者,您可以使用an accessor,但在这种情况下,您将会遇到N+1 problem。