Laravel从DB获取2个用户之间的所有消息
我在我的网站上的用户之间使用一个简单的消息系统 每条消息都有自己的唯一ID,因此每个用户只能看到当前消息的标题和文本。我现在不想编码聊天信息系统只想显示表中两个用户之间当前消息上方的所有消息 我的邮件现在的样子示例:Laravel从DB获取2个用户之间的所有消息,laravel,laravel-5,Laravel,Laravel 5,我在我的网站上的用户之间使用一个简单的消息系统 每条消息都有自己的唯一ID,因此每个用户只能看到当前消息的标题和文本。我现在不想编码聊天信息系统只想显示表中两个用户之间当前消息上方的所有消息 我的邮件现在的样子示例: Title: Text/Message: Reply Button 我希望现在显示所有其他消息 默认代码: Message from <span class="font-weight-600">{{$message->From->username}}&l
Title:
Text/Message:
Reply Button
我希望现在显示所有其他消息
默认代码:
Message from <span class="font-weight-600">{{$message->From->username}}</span> sent to <span class="font-weight-600">{{$message->To->username}}</span>
<div align="middle" class="form-group">
<font color="#b7b7b7">
</div>
<div class="form-group">
<label for="title">Subject:</label>
<input type="text" name="title" id="title" value="{{$message->title}}" class="formcreateproducttitle" readonly="">
</div>
<div class="form-group">
<label for="text">Message:</label>
<textarea name="text" class="formcreateproductdesc" style="resize:none" rows="8" cols="80" readonly="">{{$message->text}}</textarea>
</div>
<div class="form-group">
<center>
@if(Auth::user()->id == $message->To->id)
<a href="{{route('sendmessage',['username'=>$message->From->username])}}" class="btn btn-primary">Reply</a>
@elseif(Auth::user()->id == $message->From->id)
<a href="{{route('sendmessage',['username'=>$message->To->username])}}" class="btn btn-primary">Send another message to {{$message->To->username}}</a>
@endif
</center>
</div></font>
<table class="table table-hover">
<thead>
<th>Title</th>
<th>text</th>
</thead>
<tbody>
@foreach($message as $messages)
<tr>
<td><?php $user = DB::table('messages')->where(['from'=> $message->from])->first(); echo $user->title; ?></td>
<td> </td>
@endforeach
</tr>
</tbody>
</table>
但是现在我在每一行中只看到来自DB的用户之间的第一条消息,我想是因为->第一条;对吗
如何显示两个用户之间的所有消息,而不仅仅是第一个用户?
或者只从发送者那里,我如何在上面的代码中做得更好
非常感谢使用查询生成器:
public static function getAChatMessages($receiverUserId, $senderUserId)
{
$firstMessages = DB::tabel("message")->where([['from',$receiverUserId],
['to',senderUserId]])->orderBy('dateTime','DESC')->get();
$allMessages = DB::tabel("message")->where([['to',$receiverUserId],
['from',senderUserId]])->union(firstMessages)->orderBy('dateTime','DESC')->get();
return $allMessages();
}
“first”函数将只返回第一条消息,您需要使用“get”对其进行更改,并对所有消息进行迭代
public function ViewMessage($uniqueid){
//it will return a collection of messages
$message = Message::where('uniqueid',$uniqueid)->get();
if ($message == null) {
return redirect()->route('messages');
}
//use loop to check on every message
foreach ($message as $m) {
if ($m->viewed == false && Auth::user()->id == $m->to) {
$m->viewed = true;
$m->save();
}
}
return view('message.view')->with([
'message'=>$message
]);
}
您是否设置了关系?您完全错了,您应该在控制器中获取所有消息,然后将其传递给视图。您的意思是在我的控制器中:$messages=Message::all?我看不到代码示例中的控制器问题已更新。我添加了用于查看消息的控制器。我知道我必须在这之前改变它,如果它不起作用的话。
public function ViewMessage($uniqueid){
//it will return a collection of messages
$message = Message::where('uniqueid',$uniqueid)->get();
if ($message == null) {
return redirect()->route('messages');
}
//use loop to check on every message
foreach ($message as $m) {
if ($m->viewed == false && Auth::user()->id == $m->to) {
$m->viewed = true;
$m->save();
}
}
return view('message.view')->with([
'message'=>$message
]);
}