序列化多个主键

Sim*_*aac 5 foreign-keys sequelize.js

我对具有多个主键的Sequelize有一些问题;因此,同一表上具有多个hasMany的多个外键。

假设我有用户

const User = sequelize.define('User', {
    id: { type: DataTypes.STRING(6), field: 'ID', primaryKey : true }
)
associate: function(models) {
        User.hasMany(models.Post, { foreignKey: 'userId' });
}
Run Code Online (Sandbox Code Playgroud)

而且我在用户下有帖子

const Post = sequelize.define('Post', {
    id: { type: DataTypes.STRING(6), field: 'ID', primaryKey: true }, // primary key
    userId: { type: DataTypes.STRING(6), field: 'USER_ID', primaryKey: true },           // primary key
)
associate: (models) => {
        Post.belongsTo(models.User, { foreignKey: 'userId' });
        Post.hasMany(models.PostImage, { onDelete: 'CASCADE', foreignKey: 'postId' });// { key1: 'id', key2: 'userId'}
        Post.hasMany(models.PostImage, { onDelete: 'CASCADE', foreignKey: 'userId' });// { key1: 'id', key2: 'userId'}
}
Run Code Online (Sandbox Code Playgroud)

在发布下发布图像

const PostImage = sequelize.define('PostImage', {
    postId: { type: DataTypes.STRING(6), field: 'POST_ID', primaryKey: true },
    userId: { type: DataTypes.STRING(6), field: 'USER_ID', primaryKey: true }
)
associate: (models) => {
        PostImage.belongsTo(models.Post, { foreignKey: 'postId' });
        PostImage.belongsTo(models.Post, { foreignKey: 'userId' });
}
Run Code Online (Sandbox Code Playgroud)

现在看来,带有两个外键的两个主键不适用于使用findOne或findAll的“ include”方法。

Post.findAll({
      attributes: ['id', 'userId', 'content', 'modifyDate', 'registerDate'],
      where: {...},
      include: [{
        model: models.PostImages,
      }
)
Run Code Online (Sandbox Code Playgroud)

对于表Post和Post Image,似乎只有一个带有一个外键的主键相互链接。所以如果我删除关系

Post.hasMany(models.PostImage, { onDelete: 'CASCADE', foreignKey: 'userId' });// { key1: 'id', key2: 'userId'}
Run Code Online (Sandbox Code Playgroud)

从Post使用Post Image只制作一个外键,那么它将按我的预期工作。但这引起了问题,因为它只考虑了发布图像的发布ID,而不是用户,因此也带来了其他用户的发布图像。

如何在序列化中将多个主键与多个外键一起使用?