Mysql 我怎样才能与Sequelize有多对多的关联?
我有两种车型,一种是Mysql 我怎样才能与Sequelize有多对多的关联?,mysql,node.js,sequelize.js,Mysql,Node.js,Sequelize.js,我有两种车型,一种是个人车型,另一种是汽车,定义如下: module.exports = function(sequelize, DataTypes) { var Person; Person = sequelize.define('Person', { name: { type: DataTypes.STRING, allowNull: false }, profession: { type: DataTypes.STRING
个人
车型,另一种是汽车
,定义如下:
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;
};
及
这就是我们所期望的,并创建了三个表:Persons
、Cars
和CarsPersons
我已经在表中添加了一些汽车
,现在我想在人员
表中添加一个人员
。比如说,我的CarId15。因此,在添加人员时,我会:
DB.Person.create({name: 'My Name', profession: 'Lawyer'}).complete(function(err)....
如何在CarsPersons
表中创建一个关联,使CarId
为15,而PersonId
为这个新ID是什么?除了上面的答案(add方法)之外,Sequelize注入了一些在处理设置外键等方面提供便利的方法
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);
});
});
在多对多关联的情况下,您可以调用.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的解决方案在两个实例都已经存在的情况下效果很好,但我认为通常应该在创建时设置关联
查看文档中的关联以查看其他注入方法:
// Find person who owns the car
DB.Person.find(5)
.then(function (person) {
// Will create entry with PersonId: 5, CarId: createdCarId
person.createCar({ ... })
})