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中使用多个主键和多个外键?