2016-09-15 76 views
0

我試圖創建商店和產品表之間的1:1關係。 每個產品都應該有一個商店桌子的外鍵,每個商店都應該有產品的外鍵。sqlize/hasOne中的關係不起作用

我已經定義了這兩個表。

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 
} 

`

變種店=要求(」 ./ 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 {外鍵}和shop_id其它外鍵,兩人到店表。

如果我更換1:1間的關係,如果1:N例如

db.component.hasMany(..) 

它做同樣的事情,增加了外國鍵進入商店表

回答

1

您需要從參考模型在回調方法中向您提供的對象。因此,在這種情況下,你會怎麼做:

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

注意,如果你想添加一個約束(比如NOT NULL)到FK,簡單的添加allowNull: false

我相信你引用了錯誤的模型。您已將商店列爲您的商店對象,因此請嘗試將models.shop更改爲models.shops

+0

這也不會將FK添加到組件表中。但它不再添加到餐桌上了。 – Darlyn

+0

這只是說組件HAS ONE商店。您確定您正在應用這些更改嗎?確保你正在同步表格。 @trolkura – James111

+0

是的,我正在同步並保存更改。在sqlite瀏覽器中,組件表仍然不包含FK http://pastebin.com/X2gGLqm2這裏是代碼 – Darlyn