Я определил две модели: 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)
из модели Bookmark, и ничего не изменилось.
Проблема и исправление
Оказывается, вам нужно явно вызвать sync
для экземпляра Sequelize
, и, если таблицы в ассоциации уже присутствует, вы должны включить аргумент {force: true}
для сохранения связи с базой данных.