Laravel - 如何合并关系结果?

时间:2017-05-27 07:35:48

标签: laravel

如何将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" }]

仅获取没有用户数组的昵称部分。我希望你能理解我。 对不起我的英语,祝你有愉快的一天

1 个答案:

答案 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