我正在用Laravel 9为一个站点构建一个内部信使。我希望能够向我的用户单方面发送消息。但这是如何工作的呢?如果我有4000个用户,是否应该在数据库中为每个用户插入一个消息副本?或者将带有透视表的消息连接到用户表?如果用户删除了该消息,我如何知道我将邮件发送给了哪些用户?如何才能使服务器不会超时或崩溃?这样做是否会耗尽数据库的容量?正确的方法是什么?
y1aodyip1#
创建两个表:聊天室和消息。将聊天室中的用户分组(一个聊天室中可以有两个以上的用户)。然后创建外键为room_id的消息。您还可以在消息中添加“阅读者”收件人,以查看阅读消息的收件人。只需在消息向上滚动以加载下一页时对消息进行分页即可。rooms migration
rooms migration
Schema::create('chat_rooms', function (Blueprint $table) { $table->id(); $table->string('_uuid', 50); $table->string('chat_initiator', 50); $table->json('user_ids'); $table->timestamps(); });
messages migration
Schema::create('chat_messages', function (Blueprint $table) { $table->id(); $table->string('_uuid', 50); $table->string('chat_room_id', 50); $table->string('posted_by_user', 50); $table->json('message'); $table->json('read_by_recipients'); $table->string('type', 10); $table->timestamps(); });
因为您使用json作为字段,所以将其添加到模型中
protected $casts = [ 'colummn_here' => 'array', ];
房间table
消息表
1条答案
按热度按时间y1aodyip1#
创建两个表:聊天室和消息。将聊天室中的用户分组(一个聊天室中可以有两个以上的用户)。然后创建外键为room_id的消息。您还可以在消息中添加“阅读者”收件人,以查看阅读消息的收件人。只需在消息向上滚动以加载下一页时对消息进行分页即可。
rooms migration
messages migration
因为您使用json作为字段,所以将其添加到模型中
房间table
消息表