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,而不是用户,因此也带来了其他用户的发布图像。
如何在序列化中将多个主键与多个外键一起使用?
| 归档时间: |
|
| 查看次数: |
1768 次 |
| 最近记录: |