NodeJS Sequelize在声明关联后创建未知列,该奇怪列的名称模式为“TableNameTableNameId”

bis0qfac  于 2022-12-18  发布在  Node.js
关注(0)|答案(1)|浏览(116)

我有一个这样的声明范本。

const Account = Sequelize.define("Account", {
   account_id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
   }
}

const Student = Sequelize.define("Student", {
   student_id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
   },

   account_id: {
      type: DataTypes.INTEGER,
      unique: true,
      allowNull: false,
  }
}

然后我也宣布了我的联想

Account.hasOne(models.Student);
Student.belongsTo(models.Account, {
   foreignKey: "account_id",
   allowNull: false,
});

问题是,当我选择帐户并连接或include学生时,它在SQL语句中查询名称为AccountAccountId的列,然后引发一个错误,即找不到该列。
这是我的疑问

const account = await Account.findOne({
      attributes: ["account_id", "is_active"],
      include: [
        {
          model: Student,
          attributes: ["student_id", "account_id"],
          where: {
            student_id: id,
          },
        },
      ],
    });


错误为“on子句”中的未知列“Student.AccountAccountId”(错误号1054)(sqlstate 42S22)(调用者ID:0kxatsabmiwg49ko77ez)的数据:
我的包json依赖项:

{
"dependencies": {
    "cookie-parser": "^1.4.6",
    "cors": "^2.8.5",
    "csurf": "^1.11.0",
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "https": "^1.0.0",
    "jsonwebtoken": "^8.5.1",
    "mysql2": "^2.3.3",
    "passport": "^0.6.0",
    "passport-jwt": "^4.0.0",
    "sequelize": "^6.25.8"
  }
}
sqxo8psd

sqxo8psd1#

这是定义配对关联时的典型错误:如果您在一个关联中使用外键列的名称指定了自定义foreignKey选项,则应在第二个关联中也指定相同的外键名称:

Account.hasOne(models.Student, { foreignKey: "account_id" });
Student.belongsTo(models.Account, {
   foreignKey: "account_id",
   allowNull: false,
});

默认情况下,Sequelize为外键列指定如下名称:型号名称Id(在本例中应为AccountId)。

相关问题