【问题标题】:Relations in sqlize / hasOne does not worksqlize / hasOne 中的关系不起作用
【发布时间】:2017-01-24 00:02:53
【问题描述】:

我正在尝试在商店表和产品之间创建 1:1 关系。 每个产品都应该有一个shop table的外键,每个shop都应该有product的外键。

我已经定义了这两个表。

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 另一个外键,它们都到了 shop 表中。

如果我替换 1:1 关系 if 1:n e.g

db.component.hasMany(..)

它做同样的事情,将两个外键添加到商店表中

【问题讨论】:

    标签: node.js sqlite sequelize.js


    【解决方案1】:

    你需要从回调方法中提供给你的models对象中引用shop。所以在这种情况下你会这样做:

    classMethods:{
        associate:function(models){
            component.hasOne(models.shop,{foreignKey:'component_shop_FK'})
        }
    }
    

    注意如果你想给FK添加一个约束(比如not null),简单的添加allowNull: false。

    我相信您引用了错误的模型。您已经为您的商店对象列出了“商店”,因此请尝试将 models.shop 更改为 models.shops!

    【讨论】:

    • 这也不会将 FK 添加到组件表中。但它不再添加到商店表中。
    • 这只是说组件有一个商店。您确定要应用更改吗?确保您正在同步表格。 @trolkura
    • 是的,我正在同步并保存更改。在 sqlite 浏览器中,组件表仍然不包含 FK pastebin.com/X2gGLqm2 这是代码
    • 确保在重新创建表格之前删除表格@trolkura
    • 我将 force 设置为 true ,是的,我正在放弃它们
    猜你喜欢
    • 2015-04-02
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多