[英]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.