Laravel - 如何使嵌套用户独一无二
Posted
技术标签:
【中文标题】Laravel - 如何使嵌套用户独一无二【英文标题】:Laravel - how to make nested users unique 【发布时间】: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;
但这根本不起作用。我尝试了很多配置。我该如何解决?
【问题讨论】:
【参考方案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,这与这个问题无关,但我已经把这些信息放在那里了几次:)以上是关于Laravel - 如何使嵌套用户独一无二的主要内容,如果未能解决你的问题,请参考以下文章