连续选择不存在的列

问题描述 投票:0回答:1

我有一个用户和角色表 角色表关联有许多用户,尽管我使用 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.
node.js postgresql sequelize.js
1个回答
0
投票

您需要对配对中的两个关联使用相同的关联设置

belongsTo/hasMany
,请参阅我的答案

Role.hasMany(models.User, {
        foreignKey: "RoleName",
        sourceKey: "name",
      });
© www.soinside.com 2019 - 2024. All rights reserved.