我定义了两个模型:
User
和
Bookmark
'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
name: DataTypes.STRING,
email: DataTypes.STRING,
pass: DataTypes.STRING
}, {});
User.associate = function(models) {
User.hasMany(models.Bookmark)
};
return User
};
'use strict'
module.exports = (sequelize, DataTypes) => {
const Bookmark = sequelize.define('Bookmark', {
title: DataTypes.STRING,
url: DataTypes.STRING
}, {})
Bookmark.associate = function (models) {
// Bookmark.belongsTo(models.User)
}
return Bookmark
}
这个
associate
函数通过在中生成的样板代码进行调用
models/index.js
:
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db)
}
})
然而,有两件事我认为他们不应该发生:
User.findAll()
.then(users => console.log(typeof users[0].getBookmarks))
在上面
getBookmarks
是
undefined
.
其次,我没有看到任何模式更新被传播到数据库。
我还试着重新激活
// Bookmark.belongsTo(models.User)
从书签模型中,没有任何更改。
问题和解决方法
事实证明,你必须明确地打电话给
sync
在
Sequelize
实例,如果关联中的表已经存在,则必须包含参数
{force: true}
用于将关联持久化到数据库。