我正在尝试在laravel中为我的网站创建聊天。我正在为用户选择最近的聊天,在此用户可以看到与他聊天的用户列表。
这是我的查询:

$data=[];
$chatusers = Chat::latest()->get(['reciver_id']);
$chatusers = collect($chatusers)->unique()->values()->all();

foreach ($chatusers as $user) {
    if ($user['reciver_id']>=5000) {
        $message=Chat::where('reciver_id',$user['reciver_id'])
            ->latest()
            ->first();

        array_push($data,$message);
    } else {
        $message=Chat::where('sender_id',$user['reciver_id'])
            ->orWhere('reciver_id',$user['reciver_id'])
            ->latest()
            ->first();

        array_push($data,$message);
    }
}


我在这里附加数据库表的屏幕:
https://imgur.com/gqsRr7Y

这是聊天列表的屏幕:-
https://imgur.com/Jw81yeH

我没有管理关系。

请对此提供帮助。

谢谢

最佳答案

   $login_user_id = 1; // use auth user_id
   $chat = Chat::where(function($q) use($login_user_id){
        $q->where('sender_id',$login_user_id)>orWhere('receiver_id',$login_user_id);
        $q->where('receiver_id',$login_user_id)->orWhere('sender_id',$login_user_id);
    })->orderBy('created_at','desc')->get()->toArray();
        $other_user_id = [];
        $message = [];
   foreach ($chat as $key => $value) {
      if(in_array($value->sender_id, $other_user_id) || in_array($value->receiver_id, $other_user_id)){
                continue;
            }
            if($value->sender_id != $login_user_id){
                $other_user_id[] = $value->sender_id;
            }else{
                $other_user_id[] = $value->receiver_id;
            }

            $message[] = $value;

        }
        print_r($message);


您必须添加表以管理未读消息。

关于mysql - 我正在尝试为laravel网站获取最近的聊天记录。但是查询返回错误的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57817765/

10-16 21:05