2017-02-28 64 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 –