Я определяю ассоциации в моделях, используя sequalize с MYSQL.Но после миграции внешний ключ не добавляется в целевую модель, как описано в документации по сиквелизу.
Я также пытался вручную определить внешние ключи в моделях и файлах миграции, но связь между таблицами по-прежнему не создавалась.Когда я просматриваю таблицы в представлении отношений в PhpMyAdmin, не создаются ограничения внешнего ключа или отношения.
Я пробовал это с SQLite и PostgreSQL с теми же результатами.Я не знаю, что я делаю не так.Вот модели.
AURHOR MODEL
//One author hasMany books
'use strict';
module.exports = (sequelize, DataTypes) => {
const Author = sequelize.define('Author', {
Name: DataTypes.STRING
}, {});
Author.associate = function(models) {
// associations can be defined here
Author.hasMany(models.Book)
};
return Author;
};
Я ожидаю, что сиквелиз добавит authorId в таблицу книг, как указано в документации, но этого не происходит
BOOK MODEL
//Book belongs to Author
'use strict';
module.exports = (sequelize, DataTypes) => {
const Book = sequelize.define('Book', {
Title: DataTypes.STRING
}, {});
Book.associate = function(models) {
// associations can be defined here
Book.belongsTo(models.Author)
};
return Book;
};
Не создано никаких связей между этими двумя таблицамипосле миграции.Я также попытался определить пользовательские внешние ключи в ассоциациях моделей следующим образом:
//Author model
Author.hasMany(models.Book,{foreignKey:'AuthorId'})
//Book model
Book.belongsTo(models.Author,{foreignKey:'AuthorId'})
все еще это не решает проблему
Я пошел вперед, чтобы определить внешние ключи в моделях, а затем сослаться на нихв такой ассоциации:
'use strict';
module.exports = (sequelize, DataTypes) => {
const Book = sequelize.define('Book', {
Title: DataTypes.STRING,
AuthorId:DataTypes.INTEGER
}, {});
Book.associate = function(models) {
// associations can be defined here
Book.belongsTo(models.Author,{foreignKey:'AuthorId'})
};
return Book;
};
Но ассоциации по-прежнему не создаются
Я наконец-то решил добавить ссылки в файлы миграции следующим образом:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Books', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
Title: {
type: Sequelize.STRING
},
AuthorId:{
type: Sequelize.INTEGER,
references:{
model:'Author',
key:'id'
}
}
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Books');
}
};
Нокогда я запускаю такой тип настройки миграции, я получаю эту ошибку: ОШИБКА: невозможно создать таблицу dbname
. books
(ошибка: 150 «Ограничение внешнего ключа сформировано неправильно»)
Я получаюПодобная ошибка при переключении на PostgreSQL.
Эта проблема довольно долго меня сдерживала.Что я могу делать не так.Я использую sequelize версии 4.31.2 с последовательным CLI.