我的postgresql数据库中有2个模型,并使用sequelize和node:
并这样关联:
UserModel.hasMany(TransactionModel, { as: 'sentTransactions', foreignKey: 'senderId' });
UserModel.hasMany(TransactionModel, { as: 'receivedTransactions', foreignKey: 'receiverId' });
UserModel.belongsToMany(TransactionModel, { as: 'transactionLikes', through: 'UserLike', foreignKey: 'userId' });
TransactionModel.belongsTo(UserModel, { as: 'receiver' });
TransactionModel.belongsTo(UserModel, { as: 'sender' });
TransactionModel.belongsToMany(UserModel, { as: 'likers', through: 'UserLike', foreignKey: 'transactionId' });
这意味着一个用户有很多交易,每个用户都可以“喜欢”很多交易。
如何删除交易并删除所有关联(接收者,发送者,喜欢者)?我也不想删除用户。
我还想更新定义如下的用户模型,以便添加“电子邮件”属性:
const UserModel = db.define('user', {
id: { type: Sequelize.STRING, unique: true, primaryKey: true },
firstName: { type: Sequelize.STRING },
lastName: { type: Sequelize.STRING },
username: {
type: Sequelize.STRING,
unique: {
args: true,
msg: USERNAME_IS_TAKEN,
},
}
如何更新模型?现有实例会发生什么?
提前感谢您的帮助!
答案 0 :(得分:1)
根据this tutorial,您的M:N关系应该可以按预期的方式工作:
对于n:m,两者的默认值为CASCADE。这意味着,如果您从n:m关联的一侧删除或更新一行,则联接表中引用该行的所有行也将被删除或更新。
此外,要执行CASCADE
行为,您还可以将onDelete
选项传递给关联调用。这样的事情应该可以解决问题:
TransactionModel.belongsToMany(UserModel, { as: 'likers', through: 'UserLike', foreignKey: 'transactionId', onDelete: 'CASCADE' });
向用户模型添加电子邮件属性应该很简单:
const UserModel = db.define('user', {
id: {
type: Sequelize.STRING,
unique: true,
primaryKey: true
},
firstName: { type: Sequelize.STRING },
lastName: { type: Sequelize.STRING },
username: {
type: Sequelize.STRING,
unique: {
args: true,
msg: USERNAME_IS_TAKEN,
}
},
email: { type: Sequelize.STRING }
});