Php Laravel口若悬河,不按预期工作
我目前正在Laravel创建一个基本的私人消息系统。在我的数据库中,我有一个messages表。其中两列是“发件人id”和“收件人id” 我想做的是使用eloquent遍历此表并在收件箱中列出当前登录用户的id在这些列中列出的所有时间。然后,我将使用“distinct”忽略重复条目,以便用户只列出一次。使用这个ID,我可以显示收件人的用户名,这样当用户单击用户名时,它会将他们带到该用户的消息线程 为了测试,我目前只检索列“recipient_id”并将其输出到刀片服务器。下面是我认为应该只输出一次接收者的行,尽管在表中被多次找到 MessageControllerPhp Laravel口若悬河,不按预期工作,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我目前正在Laravel创建一个基本的私人消息系统。在我的数据库中,我有一个messages表。其中两列是“发件人id”和“收件人id” 我想做的是使用eloquent遍历此表并在收件箱中列出当前登录用户的id在这些列中列出的所有时间。然后,我将使用“distinct”忽略重复条目,以便用户只列出一次。使用这个ID,我可以显示收件人的用户名,这样当用户单击用户名时,它会将他们带到该用户的消息线程 为了测试,我目前只检索列“recipient_id”并将其输出到刀片服务器。下面是我认为应该只输出一
$messages = Message::where('recipient_id', $user)->distinct('recipient_id')->get();
然而,在刀片服务器中,当我期望distinct函数删除重复条目时,同一用户被输出两次(因为他们发现了两条消息)
我也试过了
$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();
您应该使用如下内容:
$data = Message::select([ DB::raw('DISTINCT(recipient_id)')'])
->where('recipient_id', $user)
->get();
而不是使用集合,因为当您使用集合时,您返回了所有需要或不需要的数据,然后对其进行过滤。但是在查询中使用distinct时,您只需在一个过程中使用它们
或者您可以尝试以下选项之一:
你可以照这个做
$payment = Payment::with('invoice','customer')->get();
$payment = $payment->unique('customer_id');
它将返回所有唯一的客户付款数据。检查收款方法:@Treast这似乎大部分都有效。我用这个在控制器中做了一个dd,它只显示了一个。现在的问题是,我似乎无法将其输出到我的刀片中。我收到错误“Undefined variable:messagesUnique”(我已将刀片中的变量更改为messagesUnique),谢谢。@Treast刚刚意识到我忘了在compact中添加messagesUnique。它现在正在工作。非常感谢!
$payment = Payment::with('invoice','customer')->get();
$payment = $payment->unique('customer_id');