hasOne nad的表示hasMany在sqlite / sequelize中

时间:2016-10-09 13:59:44

标签: node.js sqlite sequelize.js

我定义了几张表。

在我连接它们的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也是如此。

本教程演示了相同的用法。

感谢您的建议。

1 个答案:

答案 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`

在你的情况下,你可能不需要。