Node.js 联接表的Sequelize错误:DatabaseError[SequelizeDatabaseError]:列不存在
我正在尝试运行以下代码块,出于某种原因,查询试图将其插入标记为“users->user\u group”“userUuid”的列中,尽管我在项目中没有引用过字符串文本userUuid(通过搜索而不是在代码库中),但也要检查pg admin中的列(使用PostgreSQL),用户组表中的两列都是user\u uuid和group\u uuid,这两列都已正确验证和填充Node.js 联接表的Sequelize错误:DatabaseError[SequelizeDatabaseError]:列不存在,node.js,postgresql,sequelize.js,Node.js,Postgresql,Sequelize.js,我正在尝试运行以下代码块,出于某种原因,查询试图将其插入标记为“users->user\u group”“userUuid”的列中,尽管我在项目中没有引用过字符串文本userUuid(通过搜索而不是在代码库中),但也要检查pg admin中的列(使用PostgreSQL),用户组表中的两列都是user\u uuid和group\u uuid,这两列都已正确验证和填充 const result = await group.findAll({ include: user, }); Postma
const result = await group.findAll({
include: user,
});
Postman body返回以下错误
“提示”:“也许您想引用列“用户->用户组.用户组ID”。”
我有3个模型用户组和用户组。这些关系是根据文档和无数其他文章和视频定义的
用户模型
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;
};
用户组模型
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;
};
非常感谢您的帮助,谢谢 您应该在
belongTomany
中指示otherKey
选项以及foreignKey
,以便在其他型号上指示外键列,否则您将以其他键的默认名称结束,请参见下文:
联接表中外键的名称(表示目标模型)或表示另一列类型定义的对象的名称(有关语法,请参阅Sequelize.define)。使用对象时,可以添加name属性来设置列的名称默认为目标名称+目标主键(您的案例:用户
+uuid
)
你应该像这样创造。b因为您遗漏了这个{}。是的,答案是Sekulzie将几乎所有东西的命名顺序都弄乱了,从表名到列名(仅外键)。必须将所有内容从u更改为camelCase,因为显然他们为这些模型设置的下划线对象(下划线:true)有很多缺陷,