gpt4 book ai didi

mysql - 未在 MySQL、PostgreSQL 和 SQLite 中创建 Sequelize 关联

转载 作者:行者123 更新时间:2023-11-29 09:44:13 25 4
gpt4 key购买 nike

我正在使用 MYSQL 的 sequalize 定义模型中的关联。但迁移后,外键不会添加到目标模型中,如sequelize 文档中所述。

我还尝试在模型和迁移文件中手动定义外键,但表之间仍然没有创建关联。当我在 PhpMyAdmin 中的关系 View 中查看表时,没有创建外键约束或关系。

我已经用 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;
};

我希望sequelize按照文档中的指定在书籍表上添加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');
}
};

但是当我运行这种迁移设置时,我收到此错误:错误:无法创建表dbnamebooks(errno:150“外键约束我是吗格式不正确”)

当我切换到 PostgreSQL 时,我遇到类似的错误。

我被这个问题困扰了很长时间。我可能做错了什么。我正在将sequelize 版本4.31.2与sequ​​elize CLI一起使用。

最佳答案

我在迁移中错误地引用了模型。错误的方式

 AuthorId:{
type: Sequelize.INTEGER,
references:{
model:'Author',
key:'id'
}

}

正确方法

  // Notes the model value is in lower case and plural just like the table name in the database
AuthorId:{
type: Sequelize.INTEGER,
references:{
**model:'authors',**
key:'id'
}

}

这解决了我的问题。现在正在定义这些关联。

关于mysql - 未在 MySQL、PostgreSQL 和 SQLite 中创建 Sequelize 关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55991994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com