Laravel-如何使嵌套用户唯一

时间:2018-07-02 20:41:20

标签: laravel

在我开始真正讨厌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;

但是这根本不起作用。我尝试了许多配置。我该如何解决?

1 个答案:

答案 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();