[英]bulkCreate junction table data in sequelize for establishing many-to-many association
[英]How can I have a many-to-many association with Sequelize?
我有两个模型,分别是“ Person
和“ Car
”:
module.exports = function(sequelize, DataTypes) {
var Person;
Person = sequelize.define('Person', {
name: {
type: DataTypes.STRING,
allowNull: false
},
profession: {
type: DataTypes.STRING,
allowNull: false
}
}, {
classMethods: {
associate: function(models) {
return Person.hasMany(models.Car, {
foreignKey: 'PersonId'
});
}
}
});
return Person;
};
和
module.exports = function(sequelize, DataTypes) {
var Car;
Car = sequelize.define('Car', {
vin: {
type: DataTypes.STRING,
allowNull: false
},
color: {
type: DataTypes.STRING,
allowNull: false
}
}, {
classMethods: {
associate: function(models) {
return Car.hasMany(models.Person, {
foreignKey: 'CarId'
});
}
}
});
return Car;
};
这可以实现预期的结果并创建三个表: Persons
, Cars
和CarsPersons
。
我已经在表中添加了一些Cars
,现在我想在Persons
表中添加Person
。 CarId
我的CarId
为15。 因此,在添加一个Person
,我这样做:
DB.Person.create({name: 'My Name', profession: 'Lawyer'}).complete(function(err)....
如何在CarsPersons
表中创建关联,以使CarId
为15,而PersonId
为该新ID是什么?
DB.Person.create({name: 'My Name', profession: 'Lawyer'}).then(function (person) {
// On latest master you can pass the id directly:
person.addCar(15);
// On older versions you will have to load the car object first:
DB.Car.find(15).then(function (car) {
person.addCar(car);
});
});
除了上述答案(添加方法)之外,Sequelize注入方法还为处理外键设置等提供了一些便利。
对于多对多关联,您可以调用.create [AssociatedModel],并且会自动为您设置密钥。 例如,如果您要创建一个属于某个人的新汽车实例,则其工作原理类似于此:
// Find person who owns the car
DB.Person.find(5)
.then(function (person) {
// Will create entry with PersonId: 5, CarId: createdCarId
person.createCar({ ... })
})
当两个实例都已存在时,Jan的上述解决方案会很好地工作,但我认为通常应在创建时设置关联。
查看文档中的关联以查看其他注入的方法: http : //sequelize.readthedocs.org/en/latest/api/associations/#hasmanytarget-options
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.