2017-05-27 162 views
1

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

预期阙RY返回用户部分的阵列,但我希望结果是这样的:

[{ "id":1, "tournament_id":3, "customer_id":2016827550, "point":0, "nickname":"OMahoooo" }]

只获得绰号部分,而无需用户阵列。我希望你能理解我。 对不起,我有英语,祝你有个愉快的日子

回答

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