sqlize / hasOne中的关系不起作用

时间:2016-09-15 20:36:57

标签: node.js sqlite sequelize.js

我试图在商店和产品表之间建立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(..)

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

1 个答案:

答案 0 :(得分:1)

您需要在回调方法中提供给您的模型对象中引用购物。所以在这种情况下你会这样做:

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

注意,如果要向FK添加约束(例如非null),则添加allowNull: false

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