gpt4 book ai didi

laravel - 对话,多对多关系

转载 作者:行者123 更新时间:2023-12-02 14:39:09 28 4
gpt4 key购买 nike

我正在开发一个应用程序,我需要用户使用类似聊天的系统相互交互。

为此,我想创建一个对话模型。据我所知,我将使用多对多关系。

具有以下模型:ConversationUserMessage,我想象了下表:

对话:id |用户1_id | user2_id - 我不确定 Laravel 是否能理解正在编号的用户 ID

消息:id |留言 |对话 ID | user_id

这是正确的方法吗?它可以与 user1_iduser2_id 表一起使用吗?

最佳答案

我建议:

  • 多对多:用户<->对话。一个User可以有多个Conversation,一个Conversation由两个或多个User组成
  • 一对多:用户<->消息。一条消息属于一个用户。一个用户有许多消息
  • 一对多:消息<->对话。一条消息属于一个对话。一个对话有许多消息

这将为您提供以下 SQL 结构(仅对列出的关系感兴趣的属性):

users: id
messages: id | user_id | conversation_id
conversations: id
conversations_users: conversation_id | user_id

想想像聊天室这样的对话,它基本上是几个用户之间共享的消息集合。

在 Laravel 中,可能的 Eloquent 模型如下所示:

class User extends Eloquent
{
public function conversations()
{
return $this->belongsToMany('Conversation');
}

public function messages()
{
return $this->hasMany('Message'); // not as relevant, because these are all messages across conversations
}
}

class Message extends Eloquent
{
public function user()
{
return $this->belongsTo('User');
}

public function conversation()
{
return $this->belongsTo('Conversation');
}
}

class Conversation extends Eloquent
{
public function messages()
{
return $this->hasMany('Message');
}

public function users()
{
return $this->belongsToMany('User');
}
}

// Users conversations
$conversations = User::find(1)->conversations;

foreach($conversations as $conversation)
{
// All members of conversation
$members = $conversation->users;

// All messages of conversation
$messages = $conversation->messages;
}

关于laravel - 对话,多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17031312/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com