【问题标题】:Optimal table structure for message system in Laravel 5Laravel 5 中消息系统的最优表结构
【发布时间】:2015-09-21 23:02:14
【问题描述】:

我正试图弄清楚如何为用户打造最高效的消息传递系统。

我的想法是(非常类似于 Facebook)当用户向另一个用户发送消息时,它会创建一个线程,其中显示用户之间发送的所有消息。将新邮件标记为收件人未读非常重要。

我想利用 Laravel 关系。

如果我创建一个包含收件人 ID 和发件人 ID 的数据透视表,我如何让 Laravel 使用 Laravel 关系区分这两个用户,以便我可以轻松获取用户参与的线程列表,无论他是只是收件人、发件人或两者兼而有之。

线程不需要标题/主题。

【问题讨论】:

    标签: mysql laravel-5 migration


    【解决方案1】:

    我会这样做:

    class User extends Model {
        public function threads() { return $this->belongsToMany(Thread::class)->withPivot('last_read_message_id'); }
    }
    
    class Thread extends Model {
        public function users() { return $this->belongsToMany(User::class)->withPivot('last_read_message_id'); }
        public function messages() { return $this->hasMany(ThreadMessage::class); }
    }
    
    class ThreadMessage extends Model {
        public function thread() { return $this->belongsTo(Thread::class); }
        public function author() { return $this->belongsTo(User::class); }
    }
    
    // List of threads where a user is involved:
    Auth::user()->threads;
    

    这样的设计,你还可以处理分组讨论,相当不错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 2013-06-24
      • 1970-01-01
      • 2013-06-20
      • 2012-09-22
      • 2012-09-29
      相关资源
      最近更新 更多