【问题标题】:internal messaging system laravel database design内部消息系统 laravel 数据库设计
【发布时间】:2016-12-16 08:01:56
【问题描述】:

我正在为一个使用 Laravel 5.3 构建的论坛构建一个内部消息系统。基本上,我希望有消息功能,类似于 Linkedin-User 可以向另一个User 发送电子邮件,反之亦然。给定的对话将只有一个线程,这将在两个用户之间进行。我一直在研究 StackOverflow 上的一些问题,但在数据库设计方面还没有完全找到我想要的。

这是我的想法:

messages:

  • 身份证PK
  • sender_id FK 到users.user_id
  • 内容

message_recipients:

  • id PK
  • message_id FK 转至messages.id
  • recipient_id FK 到users.id

但是,我不能 100% 确定 usersmessagesmessage_recipients 之间应该存在的关系类型。用户会有很多消息。消息将属于用户。但是,我将如何考虑 message_recipients 表?

请随意提出不同的设计:)

【问题讨论】:

    标签: php sql database laravel eloquent


    【解决方案1】:

    试试这种结构:

    messages:
    
    id          - int, autoincrement id
    parent_id   - int. To maintain message threads
    sender_id   - int. Senders Id
    recipient_id- int. Recievers Id
    content     - text, Message content
    status      - enum('0', '1') for Read, Unread, Deleted etc
    

    或通过维护外键关系将其分成2或3个表。

    【讨论】:

    • 干杯!感谢您的意见。
    • 如果接收者不仅仅是用户呢?也许接收者可能是团队,客人..
    • @lovecoding-laravel 在这种情况下为接收者创建另一个表并维护one-to-many 关系
    【解决方案2】:

    您只能使用idsender_idrecipient_idmessage 创建一个表。

    sender_idrecipient_id 是指向users 表的外键。

    它是many to many relationship,您可以将此表视为数据透视表,因此您可以定义belongsToMany 关系。如果你会经常使用它,你也可以为这个表创建模型。

    【讨论】:

    • 谢谢。我会试试这个:)
    • @AshMenhennett 你问过关于使用关系的问题,它应该是在User 模型中定义的两个belongsTo() 关系,但具有不同的外键。如果您觉得这听起来很陌生,请创建Message 模型并在UserMessage 之间使用两个hasMany() 关系,您将获得更简单的消息处理方式和更易读的代码。两种方式在不同的情况下都很好。
    • 感谢您的意见。我会看看这个。
    • 如果我使用 2 个hasMany(),一个在User and one in Model, does it require a belongsTo()``` 任何地方?
    • 不,不。您应该在 User 模型中使用两个 hasMany()。一个为收件人获取消息,一个为发件人获取消息。在Message 模型中,您还应该创建两个belongsTo() 关系,使用不同的外键通过用户ID 获取用户数据(例如名字)。例如,Message 中定义的关系看起来像 belongsTo('App\User', 'sender_id', 'id');belongsTo('App\User', 'recipient_id', 'id'); 也许更多 examples 也会有帮助。
    猜你喜欢
    • 2020-11-21
    • 2011-09-26
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 2011-02-24
    • 2015-01-28
    • 1970-01-01
    相关资源
    最近更新 更多