【发布时间】:2021-12-24 01:30:48
【问题描述】:
在我的项目中添加 Sequelize 时,我在迁移和添加外键约束方面遇到了很大的困难。
文档...嗯,还有改进的余地!
根据我的在线搜索,似乎其他人也在苦苦挣扎。
想要以一对多关系关联两个表:
模型 1:用户状态(值:'init'、'active'、'inactive' ...)
模型 2:用户(用户名、电子邮件、pwdhash、...)
首先,创建迁移文件:
$ sequelize model:generate --name Userstatus --attributes name:string,value:tinyint,comment:string
$ sequelize model:generate --name User --attributes username:string,pwdhash:string,email:string,statusId:tinyint
结束这四个文件(包括修改):
- 迁移/xxxxxxxxxxxxx1-create-userstatus.js
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable("Userstatus", {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.TINYINT,
},
name: {
type: Sequelize.STRING,
},
comment: {
type: Sequelize.STRING,
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable("Userstatus");
},
};
- 迁移/xxxxxxxxxxxxx2-create-users.js
"use strict";
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable("Users", {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.BIGINT,
},
username: {
type: Sequelize.STRING,
},
pwdhash: {
type: Sequelize.STRING,
},
email: {
type: Sequelize.STRING,
},
statusId: {
type: Sequelize.TINYINT,
references: {
model: "Userstatus",
key: "id",
},
onUpdate: "CASCADE",
onDelete: "SET DEFAULT",
},
statusUntil: {
allowNull: false,
type: Sequelize.DATE,
},
createdAt: {
allowNull: false,
type: Sequelize.DATE,
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE,
},
deletedAt: {
allowNull: true,
type: Sequelize.DATE,
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable("Users");
},
};
- models/userstatus.js(运行时,与迁移无关)
- models/user.js(运行时,与迁移无关)
执行命令:
$ sequelize db:migrate
Sequelize CLI [节点:14.17.0,CLI:6.2.0,ORM:6.9.0]
已加载配置文件“db\config\config.js”。
使用环境“开发”。
== xxxxxxxxxxxxx1-create-userstatus: 正在迁移 =======
== xxxxxxxxxxxxx1-create-userstatus: 已迁移 (0.101s)== xxxxxxxxxxxxx2-create-users: 迁移 =======
错误:无法创建表
myDb.Users(错误号:150“外键约束格式不正确”)
【问题讨论】:
标签: mysql sequelize.js innodb sequelize-cli