gpt4 book ai didi

node.js - Sequelize 保存多对多

转载 作者:行者123 更新时间:2023-11-29 13:28:32 26 4
gpt4 key购买 nike

我在想有没有关于如何保存多对多关系的扩展教程?我发现文档不仅仅是基本的。它缺少许多用例示例。

我有两个模型:客户端和规则。他们有 n:n 的关系。

客户:

var Client = sequelize.define('client', {
title: {
type: DataTypes.STRING(200),
allowNull: false
},
company: {
type: DataTypes.STRING(200),
allowNull: false
},
vendor: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false
},
consumer: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: true
},
address_id: {
type: DataTypes.INTEGER,
allowNull: true
}
},{
paranoid: true,
underscored: true,
classMethods: {
associate:function(models){
Client.hasMany(models.rule, { through: 'client_rules', onDelete: 'cascade'});
}
}
});

规则:

var Rule = sequelize.define('rule', {

service_id: {
type: DataTypes.INTEGER,
allowNull: false
},
is_allowed: {
type: DataTypes.BOOLEAN,
defaultValue: false
},
valid_until: {
type: DataTypes.DATE,
allowNull: true,
},
rule: {
type: DataTypes.TEXT,
allowNull: true
},
type: {
type: DataTypes.INTEGER, // 1 for company rule, 2 for individual rule
allowNull: false,
},
active: {
type: DataTypes.BOOLEAN,
defaultValue: true
}

},{
underscored: true,
paranoid: true,
classMethods: {
associate:function(models){
Rule.belongsToMany(models.client, { through: 'client_rules', onDelete: 'cascade'});
Rule.belongsTo(models.service, { foreignKey: 'service_id' } );

}
}
});

现在我想为客户端创建一个新规则。所以我必须先创建规则,然后通过“client_rules”将其关联到客户端。

我如何使用 sequelize 做到这一点?这不起作用:

var clientID = req.user.client_id;
Client.find({ id: clientID })
.then(function(client){
return client.addRule(req.body)
})
.catch(function(err){
console.log(err)
})

[TypeError: Cannot read property 'replace' of undefined]

最佳答案

好的,我知道怎么做了。文档非常困惑。

    var clientID = req.user.client_id;
return Rule.create(req.body)
.then(function(newRule){
var ruleToAdd = newRule;
return Client.findOne({ where: { id: clientID } })
.then(function(client){
return client.addRule(ruleToAdd)
.then(function(ans){
return ruleToAdd;
})
})

关于node.js - Sequelize 保存多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29051082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com