node.js - 连接表的 Sequelize 错误:DatabaseError [SequelizeDatabaseError]:列不存在
问题描述
我正在尝试运行以下代码块,由于某种原因,查询尝试将其插入标记为"users->user_group"."userUuid"的列中,尽管事实上我没有在项目(通过不在代码库中搜索),还检查 pg-admin 中的列(使用 PostgreSQL), user_group 表中的两个列都是user_uuid和group_uuid,这两个列也都经过验证和正确填充。
const result = await group.findAll({
include: user,
});
邮递员正文返回以下错误“提示”:“也许您的意思是引用列“users->user_group.user_uuid”。”,
我有 3 个模型用户、组和 user_group。这些关系已根据文档和无数其他文章和视频进行定义。
用户模型
module.exports = (sequelize, DataTypes) => {
const user = sequelize.define(
"user",
{
uuid: {
type: DataTypes.STRING,
primaryKey: true,
allowNull: false,
unique: true,
},
username: {
type: DataTypes.STRING,
unique: true,
allowNull: false,
},
{
freezeTableName: true,
}
);
user.associate = (models) => {
user.belongsToMany(models.group, {
// as: "userUuid",
through: models.user_group,
foreignKey: "user_uuid",
});
};
return user;
};
团体模型
module.exports = (sequelize, DataTypes) => {
const group = sequelize.define(
"group",
{
uuid: {
type: DataTypes.STRING,
primaryKey: true,
allowNull: false,
unique: true,
},
title: {
type: DataTypes.STRING,
unique: true,
allowNull: false,
},
},
{
freezeTableName: true,
}
);
group.associate = (models) => {
group.belongsToMany(models.user, {
// as: "groupUuid",
through: models.user_group,
foreignKey: "group_uuid",
});
};
return group;
};
用户组模型
module.exports = (sequelize, DataTypes) => {
const user_group = sequelize.define(
"user_group",
{
uuid: {
type: DataTypes.STRING,
primaryKey: true,
allowNull: false,
unique: true,
},
user_uuid: {
type: DataTypes.STRING,
allowNull: false,
references: {
model: "user",
key: "uuid",
},
},
group_uuid: {
type: DataTypes.STRING,
allowNull: false,
references: {
model: "group",
key: "uuid",
},
},
author: {
type: DataTypes.STRING,
unique: true,
allowNull: true,
},
},
{
freezeTableName: true,
}
);
user_group.associate = (models) => {
user_group.belongsTo(models.user, {
foreignKey: "user_uuid",
});
user_group.belongsTo(models.group, {
foreignKey: "group_uuid",
});
};
return user_group;
};
非常感谢任何帮助,谢谢!
解决方案
您应该指示otherKey
选项以及foreignKey
inbelongsToMany
以指示另一个模型上的外键列,否则您最终会得到另一个键的默认名称,见下文:
连接表中外键的名称(表示目标模型)或表示另一列的类型定义的对象(参见 Sequelize.define 的语法)。使用对象时,可以添加 name 属性来设置列的名称。默认为目标名称 + 目标主键(您的情况:
user
+uuid
)
group.belongsToMany(models.user, {
// as: "groupUuid",
through: models.user_group,
foreignKey: "group_uuid",
otherKey: "user_uuid"
});
推荐阅读
- javascript - 如何使用打字稿键入此回调函数
- python - 谷歌云功能上的sshtunnel转发和mysql连接
- ruby - 登录网站并下载文件 - ruby
- javascript - 您如何摆脱警报框并恢复行动流程?- Javascript
- typescript - Jest 无法导入包,而我的其他打字稿代码导入它
- javascript - 打字稿:有条件地将对象属性标记为可选?
- java - 如何用 Jackson 序列化扩展 TreeSet 的类?
- mysql - 使用单个查询获取列中每个值的顶级类别
- r - 复制蒙蒂大厅游戏
- linux - Cgroup 意外地将 SIGSTOP 传播到父级