【问题标题】:Laravel private messaging system . Fetch all related users issueLaravel 私人消息系统。获取所有相关用户问题
【发布时间】:2023-03-23 06:12:01
【问题描述】:

我指的是这个线程 Laravel 4 Relationship: messaging system

我创建了表格并在模型“消息”和“用户”中建立了关系。 现在我可以通过这个命令获取我发送的消息列表 user::find($myid)->sent_messages()->get();

我的问题是

我们如何获取已向我发送消息的用户列表(登录用户)? 我的意思是在消息表中“from”可以登录用户 (1) 或“to”可以登录用户 (1)。我想获取与(登录用户)聊天的其他用户的列表。

希望您能理解我的问题并提供帮助。我是 laravel 的新手,正在努力学习东西和最佳实践。如果您建议使用 github 中已有的任何消息传递系统。我找到了一个名字“Laravel-messenger”,但不适合我。

我们非常感谢您的建议和回答。谢谢

【问题讨论】:

    标签: laravel eloquent private messaging


    【解决方案1】:

    可能不是使用表 user_messages(只需删除它),您只需将表 Messages 修改为以下形式:

    Messages: id | from_user_id | to_user_id | content
    

    然后就可以查询了:

    $received = Messges::where('to_user_id','=',my_user_id);
    $send = Messges::where('from_user_id','=',my_user_id);
    $result = $received->union($send)->get();
    

    (奖励:您还可以添加列replay_from_message_id(第一条消息为空)以保存消息的反向序列(线程)。然后您还可以添加列first_message_id以简化获取线程查询)

    【讨论】:

    • 查询 $result = Messges::where('to_user_id','=',my_user_id);将返回消息集合 where "to_user_id" = mine id 对吗?这意味着有人发送给我的那些消息对吗?如果第一条消息是我发送给某人的消息怎么办?同样的查询也可以在那里工作吗?谢谢
    • 如果你想要发送给某人的消息,那么只需使用:$result = Messges::where('from_user_id','=',my_user_id); (也可以使用 eloquent union 来“合并”这两种查询)。
    • 在上述解决方案中,当某些用户删除消息时,您也不会遇到任何问题。然后你可以添加两个布尔列'deleted_by_sender'和'deleted_by_receiver',如果每个都为真,那么你可以删除行。
    • 如何从用户模型中获取这样的信息 public function messages() { return $this->hasMany(Message::class, 'to'); } 公共函数 sent_messages() { return $this->hasMany(Message::class, 'from'); } 然后在控制器中做这样的事情 $currentUser = Auth::user()->id; $users1 = User::find($currentUser)->messages()->get(); $users2 = User::find($currentUser)->sent_messages()->get(); $AllUsers = $users1->merge($users2);
    • 是的,谢谢你的想法。它清除了我的概念。谢谢:)
    猜你喜欢
    • 2016-05-07
    • 2012-09-09
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 2014-10-15
    相关资源
    最近更新 更多