将关联添加到sequelizejs模型

我已经定义了一个模型(通过使用sequelize-cli):

'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; }; 

但是,当我查询数据库中的数据库后I db:migrate我得到:

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

文件真的没有什么比我上面做的不同。 我希望在这里看到一个product_id字段。 我究竟做错了什么?

编辑:

Sequelize-CLI在模型中创build一个名为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方法,它调用适当的function (hasMany等),并根据文件build立正确的关系。 本教程似乎证实了这一逻辑。

顺序迁移将根据迁移文件创build更改,因此您需要使用引用来指定外键,如下所示https://stackoverflow.com/a/23035179/4583460

Sequelize.sync命令将创build关联所需的任何附encryption钥。 所以要么使用同步,要么提到改变你的迁移文件来包含外键引用。