Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel口若悬河,不按预期工作_Php_Laravel_Laravel 5_Eloquent - Fatal编程技术网

Php Laravel口若悬河,不按预期工作

Php Laravel口若悬河,不按预期工作,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我目前正在Laravel创建一个基本的私人消息系统。在我的数据库中,我有一个messages表。其中两列是“发件人id”和“收件人id” 我想做的是使用eloquent遍历此表并在收件箱中列出当前登录用户的id在这些列中列出的所有时间。然后,我将使用“distinct”忽略重复条目,以便用户只列出一次。使用这个ID,我可以显示收件人的用户名,这样当用户单击用户名时,它会将他们带到该用户的消息线程 为了测试,我目前只检索列“recipient_id”并将其输出到刀片服务器。下面是我认为应该只输出一

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

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

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

MessageController

$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');