【问题标题】:Representation of hasOne nad hasMany in sqlite/sequelizesqlite/sequelize 中 hasOne 和 hasMany 的表示
【发布时间】:2017-02-18 01:22:55
【问题描述】:

我定义了几个表。

在我尝试创建的连接它们的 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”,它是外键并且是正确的。

但是在赞助商表中,id 没有创建赞助商的外键。 为什么会这样?我正在使用 sqlitebrowser 查看表格。

hasMany 的使用也是如此。

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

感谢您的建议。

【问题讨论】:

    标签: node.js sqlite sequelize.js


    【解决方案1】:

    来自docs

    HasOne 关联是一对一关系的外键存在于目标模型上的关联。

    再往下:

    尽管它被称为 HasOne 关联,但对于大多数 1:1 关系,您通常需要 BelongsTo 关联,因为 BelongsTo 将在源上添加外键,而 hasOne 将在目标上添加。

    所以在你的情况下:

    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();
    

    这可能是您正在寻找的。​​p>

    还有:

    db.k_osoba.hasOne( db.sponzor ); // Adds `k_osobaId` to `sponzor`
    

    在您的情况下,您可能无论如何都不需要。

    【讨论】:

    • 我很困惑,我对 sequelize/sqlite 没有太多经验。因此,通过使用我发布的代码,我可以使用 db.sponzor.createK_osoba() 将 kosoba 添加到赞助商表中的行,并使用 getSponzor() 从 osoba 检索赞助商?为什么在sqlitebrowser中没有显示hasOne而belongsTo是?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 2016-04-06
    • 2018-12-06
    • 2021-11-15
    • 2016-03-17
    • 1970-01-01
    相关资源
    最近更新 更多