2017-02-28 62 views
1

我已經定義的模型(通過使用sequelize-CLI)爲這樣:加入協會sequelizejs車型

'use strict'; 
module.exports = function(sequelize, DataTypes) { 
var Rating = sequelize.define('Rating', { 
    star_count: DataTypes.FLOAT, 
    details: DataTypes.TEXT 
}, { 
    classMethods: { 
    associate: function(models) { 
     Rating.hasOne(models.Product); 
    } 
} 
}); 
return Rating; 
}; 

然而,當我查詢Rating數據庫後,我db:migrate我得到:

SELECT * from "Ratings"; 
id | star_count | details | createdAt | updatedAt 
----+------------+---------+-----------+----------- 

文檔實際上並沒有說出與上面所做的不同之處。我期望在這裏看到一個product_id字段。我究竟做錯了什麼?

編輯:

Sequelize-CLI創建了一個模型中被稱爲index.js文件。它看起來像這樣:

'use strict'; 

var fs  = require('fs'); 
var path  = require('path'); 
var Sequelize = require('sequelize'); 
var basename = path.basename(module.filename); 
var env  = process.env.NODE_ENV || 'development'; 
var config = require(__dirname + '/../config.js')[env]; 
var db  = {}; 

if (config.use_env_variable) { 
    var sequelize = new Sequelize(process.env[config.use_env_variable]); 
} else { 
    var sequelize = new Sequelize(config.database, config.username,  config.password, config); 
} 

fs 
    .readdirSync(__dirname) 
    .filter(function(file) { 
    return (file.indexOf('.') !== 0) && (file !== basename) &&  (file.slice(-3) === '.js'); 
    }) 
    .forEach(function(file) { 
    var model = sequelize['import'](path.join(__dirname, file)); 
    db[model.name] = model; 
}); 

Object.keys(db).forEach(function(modelName) { 
    if (db[modelName].associate) { 
    db[modelName].associate(db); 
    } 
}); 

db.sequelize = sequelize; 
db.Sequelize = Sequelize; 

module.exports = db; 

這似乎是在提醒associate方法,它調用the appropriate functions(的hasMany等),根據文件應樹立正確的關係。 This教程似乎證實了這一邏輯。

回答

1

Sequelize遷移將根據遷移文件,所以你需要指定參照外鍵這裏https://stackoverflow.com/a/23035179/4583460

顯示的Sequelize.sync命令將創建爲聯想所需要的任何aditional的鍵創建的變化。所以要麼使用同步,要麼提到改變你的遷移文件以包含外鍵參考。

+0

嗨,謝謝你的回覆。我已經更清楚地更新了我的解釋。它看起來在'models'中的'index.js'沒有被調用,所以這些關聯從不被創建。我不確定這是否與你所說的相同。這個文件是在遷移過程中加載的,還是隻有當我從'models'需要'模型時? – rec

+0

不,這是不是遷移文件它有單獨的文件夾。在需要包含所有模型的文件夾時,必須調用index.js。 –

+0

樣本如何使用index.js http://stackoverflow.com/a/42160489/4583460 –