检索两个用户之间的聊天记录sequelize

问题描述 投票:0回答:2

我需要有关如何在sequelize中检索两个用户之间的聊天记录的帮助。

我目前有两张桌子;一个用于用户,另一个用于消息。

我的用户表有基本信息,如用户名,电子邮件和密码,而我的消息表有像senderId,receiverId和message这样的信息

下面是我的模型的代码。

消息模型

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Messages', {
  id: {
    allowNull: false,
    autoIncrement: true,
    primaryKey: true,
    type: Sequelize.INTEGER
  },
  receiverId: {
    type: Sequelize.INTEGER,
    onDelete: 'CASCADE',
    references: {
      model: 'Users',
      key: 'id',
      as: 'receiverId',
    }
  },
  identifier: {
    type: Sequelize.INTEGER,
    defaultValue: 0
  },
  senderId: {
    type: Sequelize.INTEGER,
    onDelete: 'CASCADE',
    references: {
      model: 'Users',
      key: 'id',
      as: 'senderId',
    }
  },
  message: {
    type: Sequelize.TEXT
  },
  createdAt: {
    allowNull: false,
    type: Sequelize.DATE
  },
  updatedAt: {
    allowNull: false,
    type: Sequelize.DATE
  }
    });
   },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Messages');
   }
   };

用户模型

'use strict';
module.exports = (sequelize, DataTypes) => {
  var User = sequelize.define('User', {
username: {
  type: DataTypes.STRING,
  unique: true
},
email: {
  type: DataTypes.STRING,
  unique: true
    },
    password: DataTypes.STRING
  }, {
     classMethods: {
    associate: function (models) {
      // associations can be defined here
      User.hasMany(models.Message, {
        onDelete: 'CASCADE',
        foreignKey: 'senderId'
      });

      User.hasMany(models.Message, {
        onDelete: 'CASCADE',
        foreignKey: 'receiverId'
      });
        }
      }
    });
  return User;
};

我需要帮助的是如何检索两个用户之间的聊天记录。

javascript node.js postgresql sequelize.js koa
2个回答
1
投票

我有这样的问题,我能够通过为两个用户生成唯一标识符来解决它。当用户A向用户B发送消息时,我将他们的userId组合在一起并存储在数据库中。例如'234:123'然后我将它存储在标识符列内的聊天表中。

您需要了解的一点是确保以升序存储ID。例如,如果ID为3的用户A向ID为2的用户B发送消息,当您想将其标识符存储在数据库中时,请确保将其存储为“3:2”​​,较大的ID将首先出现。每当您想要检索他们的聊天记录时,只需使用他们的标识符,并再次确保更大的iD首先出现。


0
投票

我认为你可以通过senderID和receiverId查询消息表。然后,如果您有很多结果,也许您可​​以按日期过滤查询

© www.soinside.com 2019 - 2024. All rights reserved.