我有一个用户和角色表 角色表关联有许多用户,尽管我使用 roleName 作为 user.js 中的外键列而不是角色表的 id....当我尝试运行任何查询时,我会遇到此错误
它不断查询“RoleId”外键列,每当我尝试在用户表上运行查询时,我都会将其更改为“RoleName”
{
"status": 500,
"alert": "danger",
"name": "SequelizeDatabaseError",
"parent": {
"length": 107,
"name": "error",
"severity": "ERROR",
"code": "42703",
"position": "168",
"file": "parse_relation.c",
"line": "3666",
"routine": "errorMissingColumn",
"sql": "SELECT \"id\", \"first_name\", \"last_name\", \"email\", \"password\", \"phone_no\", \"active\", \"address\", \"country\", \"RoleName\", \"GroupId\", \"createdAt\", \"updatedAt\", \"deletedAt\", \"RoleId\" FROM \"Users\" AS \"User\" WHERE (\"User\".\"deletedAt\" IS NULL AND \"User\".\"email\" = '[email protected]');"
},
"original": {
"length": 107,
"name": "error",
"severity": "ERROR",
"code": "42703",
"position": "168",
"file": "parse_relation.c",
"line": "3666",
"routine": "errorMissingColumn",
"sql": "SELECT \"id\", \"first_name\", \"last_name\", \"email\", \"password\", \"phone_no\", \"active\", \"address\", \"country\", \"RoleName\", \"GroupId\", \"createdAt\", \"updatedAt\", \"deletedAt\", \"RoleId\" FROM \"Users\" AS \"User\" WHERE (\"User\".\"deletedAt\" IS NULL AND \"User\".\"email\" = '[email protected]');"
},
"sql": "SELECT \"id\", \"first_name\", \"last_name\", \"email\", \"password\", \"phone_no\", \"active\", \"address\", \"country\", \"RoleName\", \"GroupId\", \"createdAt\", \"updatedAt\", \"deletedAt\", \"RoleId\" FROM \"Users\" AS \"User\" WHERE (\"User\".\"deletedAt\" IS NULL AND \"User\".\"email\" = '[email protected]');",
"parameters": {},
"message": "An unknown error occured",
"error": "column \"RoleId\" does not exist",
"result": null
}
这是我的用户模型供参考:
"use strict";
const { Model } = require("sequelize");
const { password } = require("../config");
module.exports = (sequelize, DataTypes) => {
class User extends Model {
static associate(models) {
// define association here
User.belongsTo(models.Role, {
foreignKey: "RoleName",
targetKey: "name",
});
User.hasMany(models.Otp);
User.belongsToMany(models.Permission, { through: "UserPermission" });
User.belongsTo(models.Group, {foreignKey: "GroupId"});
}
}
User.init(
{
first_name: DataTypes.STRING,
last_name: DataTypes.STRING,
email: { type: DataTypes.STRING, unique: true },
password: DataTypes.STRING,
phone_no: { type: DataTypes.STRING, unique: true },
active: DataTypes.INTEGER,
address: DataTypes.STRING,
country: DataTypes.STRING,
RoleName: {
type: DataTypes.STRING,
allowNull: false,
references: {
model: "Roles",
key: "name",
},
},
GroupId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: "Groups",
key: "id",
},
},
},
{
timestamps: true,
paranoid: true,
sequelize,
modelName: "User",
}
);
return User;
};
这是我的榜样供参考:
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class Role extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
Role.hasMany(models.User);
}
}
Role.init(
{
name: { type: DataTypes.STRING, unique: true, allowNull: false}
},
{
timestamps: true,
sequelize,
modelName: "Role",
}
);
return Role;
};
```
i tried dropping the table and also restarting the db and my system overall but i got the same error.
您需要对配对中的两个关联使用相同的关联设置
belongsTo/hasMany
,请参阅我的答案:
Role.hasMany(models.User, {
foreignKey: "RoleName",
sourceKey: "name",
});