在我开始真正讨厌php和laravel之前,我会寻求帮助
我正在努力为要约集合中的用户创造独特的价值。
此收集是通过与用户模型之间的关系完成的:
public function users(){
return $this->belongsToMany(User::class, 'messages', 'offer_id', 'from');
}
在控制器中:
$user_id = auth()->user()->id;
$offers = Offer::where('user_id', $user_id)->orderBy('created_at','desc')->get();
foreach ($offers as $offer)
{
$offer->users;
}
return $offers;
这以某种方式(?)在我的要约集合中嵌套了“用户”,从而给了我正确的结果。
offer_title : (...)
个用户 : 数组(3) 0 : {…} 1个 : {…} 2 : {…}
这是正确的结果,除了-用户正在重复-因为一个用户可以发送多条消息。这就是为什么我要通过这种方式使它们独特:
foreach ($offers as $offer)
{
$offer->users = $offer->users->unique()->values()->all();
}
return $offers;
但是这根本不起作用。我尝试了许多配置。我该如何解决?
答案 0 :(得分:2)
$offer->users
设置属性,您必须使用setRelation()
:
$offer->setRelation('users', $offer->users->unique());
此外,您应该使用eager loading来提高性能:
$offers = Offer::where('user_id', $user_id)
->orderBy('created_at', 'desc')
->with('users')
->get();