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 - 如何使嵌套用户独一无二的主要内容,如果未能解决你的问题,请参考以下文章

电子邮件地址字段的值已被使用。 laravel 请求验证

如何从 Windows 命令提示符在 Laravel 中运行 PHPUnit

Laravel 路由问题:自动重定向到根文件夹

公共 Laravel API 的身份验证

如何使每个表单标签独一无二

PHP精品教程 | 全方位解读Laravel框架及实战