【发布时间】:2018-12-30 13:43:21
【问题描述】:
我的 postgresql 数据库中有 2 个模型并使用 sequelize 和节点:
- 用户
- 交易
并像这样关联:
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,
},
}
如何更新模型?现有实例会怎样?
提前感谢您的帮助!
【问题讨论】:
-
这与其说是一个 PostgreSQL 问题,不如说是对您选择的 ORM 的调查。您正在寻找的是带有 ON DELETE CASCADE / SET NULL / DO NOTHING 的外键,但我不确定它会生成什么样的 SQL。