我定义了几张表。
在我连接它们的db.js文件中,我正在尝试创建 1:n关系(有很多) 1:1关系(hasOne)
用表格来证明
var sponzor = sequelize.define('sponzor',{
id: {
type: DataTypes.INTEGER,
allowNull:false,
primaryKey:true,
autoIncrement:true
},
name:{
type:DataTypes.STRING,
allowNull:false
},
lastName:{
type: DataTypes.STRING,
allowNull:false
},
number:{
type: DataTypes.STRING,
allowNull:false
},
})
var k_osoba = sequelize.define('kontaktna_osoba',{
id: {
type: DataTypes.INTEGER,
allowNull:false,
primaryKey:true,
autoIncrement:true
},
name:{
type: DataTypes.STRING,
allowNull:false
}
})
我用过
db.k_osoba.belongsTo( db.sponzor ); // 1:1
db.sponzor.hasOne( db.k_osoba); // 1:1
在k_osoba表中,它创建了另一行,名称为" sponzorId"这是外键及其正确。
但在sponzor表中,id没有创建sponzor的外键。 为什么会这样?我正在使用sqlitebrowser来查看表格。
使用hasMany也是如此。
本教程演示了相同的用法。
感谢您的建议。
答案 0 :(得分:0)
来自docs
HasOne关联是目标模型上存在一对一关系的外键的关联。
进一步向下:
即使它被称为HasOne关联,对于大多数1:1关系,您通常需要BelongsTo关联,因为BelongsTo会在hasOne将添加到目标上的源上添加foreignKey。
所以在你的情况下:
db.k_osoba.belongsTo( db.sponzor ); // Adds `sponzorId` to `k_osoba`
db.sponzor.hasOne( db.k_osoba); // Again uses `sponzorId` to `k_osoba`
到目前为止,使用此配置,您将拥有:
db.sponzor.createK_osoba({..});
someInstanceOfK_Osoba.getSponzor();
这可能就是你要找的东西。
进一步说:
db.k_osoba.hasOne( db.sponzor ); // Adds `k_osobaId` to `sponzor`
在你的情况下,你可能不需要。