2016-09-15 12 views
0

私は店舗のテーブルと製品の間に1対1の関係を作成しようとしています。 各製品には、外付けのテーブルが必要です。各ショップには、製品の外部キーが必要です。sqlize/hasOneの関係が機能しません

私はこれら2つのテーブルを定義しています。

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店は=(」./ 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'}) 
    } 
} 

注意をあなたがallowNull: falseを追加する簡単な、FKに(例えばnullでないような)制約を追加する場合。

私は間違ったモデルを参照していると思います。あなたのショップオブジェクトに「ショップ」が表示されているので、models.shopmodels.shopsに変更してみてください!

+0

これもコンポーネントテーブルにFKを追加しません。しかし、それはもうショップテーブルには追加されません。 – Darlyn

+0

これは単にコンポーネントがHAS ONEのショップだと言っています。変更を適用してもよろしいですか?テーブルを同期していることを確認してください。 @trolkura – James111

+0

はい、変更を同期して保存しています。 sqliteブラウザでは、コンポーネントテーブルにはまだFKが含まれていませんhttp://pastebin.com/X2gGLqm2ここにコードがあります – Darlyn

関連する問題