2013-01-05 21 views
14

Sequelize.jsを使用する場合、次のコードはテーブルに外部キーを追加しません。Sequelize.js外部キー

var MainDashboard = sequelize.define('main_dashboard', { 
    title: Sequelize.STRING 
}, { 
    freezeTableName: true 
}) 

MainClient.hasOne(MainDashboard, { foreignKey: 'idClient' }) 
MainDashboard.hasOne(MainClient, { foreignKey: 'clientId' }) 

sequelize.sync({ force: true }) 

これらの外部キー制約をSequelize.jsに追加する方法はありますか?

答えて

3

私はちょうどあなたのコードを実行しようと、行は罰金を作成しているように見える:

CREATE TABLE IF NOT EXISTS `main_dashboard` (`title` VARCHAR(255), `id` INTEGER NOT NULL auto_increment , `idClient` INTEGER, PRIMARY KEY (`id`)) ENGINE=InnoDB; 
CREATE TABLE IF NOT EXISTS `main_client` (`id` INTEGER NOT NULL auto_increment, `clientId` INTEGER, PRIMARY KEY (`id`)) ENGINE=InnoDB; 

clientIdmain_clientに追加され、idClientmain_dashboard

に追加されたあなたが少し混乱していそうですhasOneメソッドは何をしますか? hasOneを呼び出すたびに関連が作成されるので、コードは2つのテーブルを効果的に関連付けます。これが関連main_dashboardテーブル上のClientIDフィールドを作成し

MainClient.hasOne(MainDashboard, { foreignKey: 'clientId' }) 
MainDashboard.belongsTo(MainClient, { foreignKey: 'clientId' }) 

:あなたが探している方法を使用すると、各クライアントが1つのダッシュボードを持っているしたい場合は、コードは次のようになりbelongsTo

ですid_fieldのフィールド

簡潔には、belongsToは、メソッドを呼び出すテーブルにリレーションを追加します。hasOneは、引数として与えられたテーブルにそれを追加します。

+0

よろしくお願いいたします。実際、これは単なる愚かな例です。 @ dankohnと同様に、データベースレベルの外部キー制約が必要です。 – swampcypress

4

あなたはforeignKeyConstraintを追加する必要があります。真
私は同じ問題を抱えていた、と私は設定Sequelizeの機能を理解するときに解決する前に

MainClient.hasOne(MainDashboard, { foreignKey: 'idClient' , foreignKeyConstraint:true }) 
19

を試してみてください。

ストレートポイント!

我々は二つのオブジェクトがあるとします。

あなたがよりよく理解するためにこれを読むことができます:

多分それはあなた

編集を

var Person = sequelize.define('Person', { 

     name: Sequelize.STRING 
}); 

var Father = sequelize.define('Father', { 

     age: Sequelize.STRING, 
     //The magic start here 
     personId: { 
       type: Sequelize.INTEGER, 
       references: 'persons', // <<< Note, its table's name, not object name 
       referencesKey: 'id' // <<< Note, its a column name 
     } 
}); 

Person.hasMany(Father); // Set one to many relationship 

を助けますhttp://docs.sequelizejs.com/en/1.7.0/docs/associations/#foreign-keys

+2

'references'と' referencesKey'の使用は廃止されました=> 'Utils deprecated非オブジェクト参照プロパティが見つかりました。それについてのサポートはバージョン4で削除されます。{references:{model: "value"、key: "key"}} {references: "value"、referencesKey: "key"}の代わりに使用されます。 –

+7

良い例では、最後の司令部は、「1人には多くの父親がいる」ということは自然ではない – Buksy