我试图在商店和产品表之间建立1:1的关系。 每个产品都应该有一个商店的外键,每个商店都应该有产品的外键。
我已经定义了这两个表。
module.exports = function( sequelize , DataTypes ){
var shops = sequelize.define('shops',{
id: {
type: DataTypes.INTEGER,
allowNull:false,
primaryKey:true,
autoIncrement:true
},
name:{
type:DataTypes.STRING,
allowNull:false
},
address:{
type: DataTypes.STRING,
allowNull:false
},
web:{
type: DataTypes.STRING,
allowNull:false
},
price:{
type: DataTypes.INTEGER,
allowNull:false
}
})
return shops
}
`
var shop = require(' ./ shops.js');
module.exports = function( sequelize , DataTypes ){
var component = sequelize.define('component',{
id: {
type: DataTypes.INTEGER,
allowNull:false,
primaryKey:true,
autoIncrement:true
},
name:{
type: DataTypes.STRING,
allowNull:false
},
storage:{
type: DataTypes.INTEGER,
allowNull:false
},
bilance:{
type: DataTypes.INTEGER,
allowNull:false
}
},{
classMethods:{
associate:function(models){
component.hasOne(shop,{foreignKey:'foreign_key'})
}
}
})
return component;
}
在db.js文件中使用连接它。
db.shop.belongsTo(db.component)
db.component.hasOne( db.shop ,{foreignKey : 'shop_id'})
但是这个添加了componentId {foreign key}和shop_id的另一个外键,它们都是商店表。
如果我替换1:1的1:1关系,例如
db.component.hasMany(..)
它做同样的事情,将两个外键添加到商店表
答案 0 :(得分:1)
您需要在回调方法中提供给您的模型对象中引用购物。所以在这种情况下你会这样做:
classMethods:{
associate:function(models){
component.hasOne(models.shop,{foreignKey:'component_shop_FK'})
}
}
注意,如果要向FK添加约束(例如非null),则添加allowNull: false
。
我相信你引用了错误的模型。您已为商店对象列出“商店”,因此请尝试将models.shop
更改为models.shops
!