【发布时间】:2020-08-25 18:56:27
【问题描述】:
为什么在我的某些模型中,sequelize 不会为 foreignkey 创建新列?但它确实为其他模型创建???这令人沮丧和奇怪。例如,在这个 User 模型中,sequelize 不会创建 role_id。
'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
id: { type: DataTypes.BIGINT, allowNull: false, autoIncrement: true, unique: true, primaryKey: true },
first_name: DataTypes.STRING,
last_name: DataTypes.STRING
}, {});
User.associate = function(models) {
User.belongsTo(models.Role, { foreignKey: 'role_id' });
};
return User;
};
这是一个类似的问题:Sequelize not creating model association columns 但是!没有人回答。
我花了几个小时在这上面,我做了所有的事情:
- 彻底阅读:https://sequelize.org/master/manual/assocs.html
- 进行实验,例如创建一个名为
NewUser的新虚拟模型。有用!但同样不是User名称。 - 发布在 Sequelize 的 Slack 频道上。
在这个 Stackoverflow 问题之后,我会从他们的 Github 问题页面寻求帮助。
我想我可以只定义列 role_id 而不是通过 associate 函数添加它。
【问题讨论】:
-
您能否展示已创建 FK 的模型与未创建 FK 的模型之间的差异?这两种型号的注册流程有区别吗?
-
嘿安托利,根本没有区别!就像我提到的那样,我尝试创建一个内容相同但文件名不同的虚拟模型,例如
ZUser.js(模型定义为ZUser,我可以看到Sequelize 添加了roldeId列。我现在真的不知道发生了什么。我认为是因为类名定义为User???? -
也许当您运行“同步”时,用户表已经存在并且 sequelize 不会改变它,而新的 ZUser 模型会导致创建一个包含所有列和 FK 的新表跨度>
-
我在开发/本地时确实同步强制为真。像这样:
db.sequelize.sync({ force : true})。我也尝试过删除所有表(但没有尝试重新创建数据库)。我还尝试删除迁移,然后重新运行 db:migrate/ -
等等!您可以使用“同步”或迁移,但不能同时使用!
标签: javascript node.js sequelize.js