我有两个模型,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
,现在我想在Person
表格中添加Persons
。我有一个CarId
的15,让我们说。所以在添加Person
时,我会这样做:
DB.Person.create({name: 'My Name', profession: 'Lawyer'}).complete(function(err)....
如何在CarsPersons
表格中创建一个关联,使CarId
为15 {和PersonId
这个新ID?
答案 0 :(得分:1)
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);
});
});
答案 1 :(得分:1)
除了上面的答案(添加方法)之外,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