【问题标题】:Laravel - how to make nested users uniqueLaravel - 如何使嵌套用户独一无二
【发布时间】:2018-12-11 02:39:48
【问题描述】:

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

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

【问题讨论】:

    标签: laravel


    【解决方案1】:

    $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();
    

    【讨论】:

    • 使用$offer->users = ...后检查dd($offer);:唯一优惠在$attributes,但应该在$relations。这就是为什么你必须使用setRelation()
    • @JonasStaudenmeir 很好,我不知道这个 +1。
    • @HCK 你不应该删除你的帖子,它非常有用
    • 没问题@gileneusz,这与这个问题无关,但我已经把这些信息放在那里了几次:)
    猜你喜欢
    • 2015-02-07
    • 2013-01-30
    • 2011-12-30
    • 2013-06-04
    • 2016-03-12
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    相关资源
    最近更新 更多