Laravel 5 中消息系统的最佳 table 结构
Optimal table structure for message system in Laravel 5
我正在努力弄清楚如何为用户制作最高效的消息传递系统。
我的想法是(与 Facebook 非常相似)当一个用户向另一个用户发送消息时,它会创建一个线程,显示用户之间发送的所有消息。重要的是将新邮件标记为收件人未读。
我想利用 Laravel 的关系。
如果我创建一个包含收件人 ID 和发件人 ID 的数据透视表 table,我怎样才能 Laravel 区分使用 Laravels 关系的 2 个用户,以便我可以很容易地得到用户参与的线程列表,无论他只是收件人、发件人或两者都是。
线程不需要title/subject。
我会这样做:
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;
这样的设计,还可以搞定群讨论,挺好的。
我正在努力弄清楚如何为用户制作最高效的消息传递系统。
我的想法是(与 Facebook 非常相似)当一个用户向另一个用户发送消息时,它会创建一个线程,显示用户之间发送的所有消息。重要的是将新邮件标记为收件人未读。
我想利用 Laravel 的关系。
如果我创建一个包含收件人 ID 和发件人 ID 的数据透视表 table,我怎样才能 Laravel 区分使用 Laravels 关系的 2 个用户,以便我可以很容易地得到用户参与的线程列表,无论他只是收件人、发件人或两者都是。
线程不需要title/subject。
我会这样做:
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;
这样的设计,还可以搞定群讨论,挺好的。