续订多个主键

时间:2017-05-09 04:01:20

标签: 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' });
}

我在用户下发帖

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

并在帖子下张贴图片

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

现在好像有两个外键的两个主键不适用于' include'使用findOne或findAll的方法。

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

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

Post.hasMany(models.PostImage, { onDelete: 'CASCADE', foreignKey: 'userId' });// { key1: 'id', key2: 'userId'}
来自Post的

只使用Post Image制作一个外键,然后它会像我预期的那样工作。但它会导致问题,因为它只考虑Post Image的Post ID,而不是用户,因此它也会带来其他用户的帖子图像。

如何在sequelize中使用多个主键和多个外键?

0 个答案:

没有答案