簡體   English   中英

檢索兩個用戶之間的聊天記錄 sequelize

[英]Retrieving chat history between two users sequelize

我需要有關如何在 sequelize 中檢索兩個用戶之間的聊天記錄的幫助。

我目前有兩張桌子; 一個用於用戶,另一個用於消息

我的用戶表包含用戶名、電子郵件和密碼等基本信息,而我的消息表包含發件人 ID、接收者 ID 和消息等信息

下面是我的模型的代碼。

消息模型

'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;
};

我需要幫助的是如何檢索兩個用戶之間的聊天記錄。

我遇到了這樣的問題,我能夠通過為這兩個用戶生成一個唯一標識符來解決它。 當用戶A給用戶B發消息時,我會把他們的userId組合在一起存入數據庫。 例如 '234:123' 然后我將把它存儲在標識符列內的聊天表中。

您需要了解的是確保按升序存儲 id。 例如,如果 ID 為 3 的用戶 A 向 ID 為 2 的用戶 B 發送了一條消息,當您想將其標識符存儲在數據庫中時,請確保將其存儲為“3:2”,較大的 ID 將首先出現。 每當你想檢索他們的聊天記錄時,只需使用他們的標識符,並再次確保較大的 iD 在前。

我認為您可以通過 senderID 和 receiverId 查詢消息表。 然后,如果您有很多結果,也許您可以按日期過濾查詢

不知道 Sequelize,但我使用 MySQL 查詢獲得了記錄,您可以將其轉換為 Sequelize

SELECT t1.*
FROM chats t1
WHERE (t1.senderPseudo = 'salahudin'
                 OR t1.receiverPseudo = 'salahudin') AND t1.createdAt = (SELECT MAX(t2.createdAt)
                 FROM advertz.chats t2
                 WHERE t2.senderPseudo = t1.senderPseudo)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM