Laravel Eloquent明显无法按预期工作

时间:2018-05-23 12:38:04

标签: php laravel laravel-5 eloquent

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

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

为了测试,我目前只检索列“recipient_id”并将其输出到刀片中。以下是我认为应该只输出一次收件人的行,尽管在表中多次被发现。

MessageController

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

然而,在刀片服务器中,同一个用户正在输出两次(因为他们发现了2条消息),我希望不同的功能可以删除重复的条目。

我也试过

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

但那也行不通。

如果我收到来自2个不同用户的3封邮件,则会输出如下内容:

来自:

的消息
  • 示例用户1
  • 示例用户1
  • 示例用户2

应该输出什么

  • 示例用户<​​/ li>
  • 示例用户2

由于

3 个答案:

答案 0 :(得分:1)

您应该使用类似这样的内容:

 $data = Message::select([ DB::raw('DISTINCT(recipient_id)')'])
           ->where('recipient_id', $user)
           ->get();

与其使用集合,不如使用集合时,返回的是您需要或不需要的所有数据,然后对其进行过滤。但是在查询中使用distinct时,只需将它们放在一个过程中即可。

或者您可以尝试以下选项之一:mentioned here

$diff = Crud::distinct()->pluck('name');

$diff = Crud::distinct()->get(['name']);

$diff = Crud::distinct()->select('name')->get();

答案 1 :(得分:0)

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

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

    $messagesUnique = $messages->unique('recipient_id');

    $messagesUnique->values()->all();

答案 2 :(得分:0)

您可以按照这个

$payment = Payment::with('invoice','customer')->get();
$payment = $payment->unique('customer_id');

它将返回所有唯一的客户付款数据。