laravel - 对话,多对多关系

标签 laravel laravel-4 eloquent

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

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

具有以下模型: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/

相关文章:

php - 如何修复 Image::make 上不支持的图像类型的错误

php - 发送用户 ID 和帖子 ID 以及评论

laravel - 深度嵌套在 Laravel 集合中的搜索值

php - Laravel 删除或更新不起作用

php - 运行 Laravel 4 迁移时出现 SQL 1005 错误

php - Eloquent hasOne 关系即使存在相关记录也返回 NULL

php - 我如何用 laravel eloquent 编写这个查询

json - 如何使用 eloquent 根据数据库关系返回 json 响应

php - 可以修改由 artisan migrate 命令创建的模板吗?

php - 如何将我的 Laravel 4 站点部署到 Windows Azure 上?