Laravel 5中消息系统的最佳表结构

时间:2015-09-21 23:02:14

标签: mysql laravel-5 migration

我正在努力弄清楚如何为用户创建最有效的邮件系统。

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

我想利用Laravels关系。

如果我创建一个包含收件人ID和发件人ID的数据透视表,我怎样才能让Laravel使用Laravels关系来区分这两个用户,以便我可以轻松获得用户参与的线程列表,无论他是否只是收件人,发件人或两者。

线程不需要标题/主题。

1 个答案:

答案 0 :(得分:0)

我会做这样的事情:

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;

通过这种设计,您还可以处理讨论组,这非常好。