php - Laravel Eloquent distinct 没有按预期工作

标签 php laravel laravel-5 eloquent

我目前正在 Laravel 中创建一个基本的私有(private)消息系统。在我的数据库中,我有一个消息表。其中两列是“sender_id”和“recipient_id”。

我正在尝试做的是使用 eloquent 浏览此表并在收件箱中列出所有当前登录用户的 id 列在这些列中的时间。然后我将使用“distinct”来忽略重复的条目,以便用户只列出一次。使用此 ID,我可以显示收件人的用户名,以便当用户单击用户名时,它会将他们带到该用户的消息线程。

为了测试,我目前只检索“recipient_id”列并将其输出到 Blade 中。这是我认为应该只输出一次接收者的行,尽管在表中被多次找到。

消息 Controller

$messages = Message::where('recipient_id', $user)->distinct('recipient_id')->get();

然而,在 Blade 中,同一用户被输出两次(因为他们找到了 2 条消息),而我原本期望不同的函数删除重复的条目。

我也试过
$messages = Message::where('recipient_id', $user)->distinct()->get();

但这也没有用。

如果我收到来自 2 个不同用户的 3 条消息,它会输出如下内容:

来自:
  • 示例用户 1
  • 示例用户 1
  • 示例用户 2

  • 它应该输出什么
  • 示例用户
  • 示例用户 2

  • 谢谢

    最佳答案

    使用 Laravel Collection 并将代码更改为:

        $messages = collect(Message::where('recipient_id', $user)->get());
    
        $messagesUnique = $messages->unique('recipient_id');
    
        $messagesUnique->values()->all();
    

    关于php - Laravel Eloquent distinct 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50488648/

    相关文章:

    php - Laravel - 将多个数据保存到数据库中的一列

    javascript - 用户无需登录直接访问文件时如何重定向登录页面

    database - laravel 5.4 多对多关系

    php - 奇怪的 PHP 正则表达式 Preg_Match Bug?

    javascript - 渲染函数错误 : "TypeError: Cannot read property of undefined" in Vue

    php - 如何简化 Laravel 中的多重搜索?

    php - 从 View 中的外键获取数据(Laravel 5.6)

    php - Laravel 5.2 - 更改从 Eloquent 获取的数据格式

    php - Mysql用随机语句更新字段

    php - Mysqli 更新抛出 Call to a member function bind_param() 错误