提问者:小点点

Sequelize未关联到


我不知道我的代码出了什么问题

模型角色

module.exports = (sequelize, DataTypes) => {
  const Role = sequelize.define(
    "role",
    {
      id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
        allowNull: false,
        primaryKey: true,
      },
      name: DataTypes.STRING,
      description: DataTypes.TEXT,
      active: DataTypes.BOOLEAN,
      created_at: DataTypes.DATE,
      created_by: DataTypes.JSON,
      updated_at: DataTypes.DATE,
      updated_by: DataTypes.JSON,
      deleted_at: DataTypes.DATE,
      deleted_by: DataTypes.JSON,
    },
    {
      tableName: "role",
      underscored: true,
    }
  );
  Role.associate = function (models) {
    Role.hasMany(models.user);
  };
  return Role;
};

模型用户

module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define(
    "user",
    {
      id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
        allowNull: false,
        primaryKey: true,
      },
      role_id: DataTypes.UUID,
      user_id: DataTypes.STRING,
      email: DataTypes.STRING,
      password: DataTypes.STRING,
      data_login: DataTypes.JSON,
      profile: DataTypes.JSON,
      verify: DataTypes.BOOLEAN,
      active: DataTypes.BOOLEAN,
      created_at: DataTypes.DATE,
      created_by: DataTypes.JSON,
      updated_at: DataTypes.DATE,
      updated_by: DataTypes.JSON,
      deleted_at: DataTypes.DATE,
      deleted_by: DataTypes.JSON,
    },
    {
      tableName: "user",
      underscored: true,
    }
  );
  User.associate = function (models) {
    User.belongsTo(models.role, { foreignKey: "role_id" });
  };
  return User;
};

我试着测试一下

const test = await user.findOne({include: [{model: role}]});

但是我得到错误:EagerLoadingError[SequelizeEagerLoadingError]:角色没有与用户关联! 在Function._GetIncludedElements(C:\users\IK\Documents\GetStudy-API\Node_Modules\Sequelize\lib\Model.js:715:13)在Function._ValidateIncludedElements(C:\users\IK\Documents\GetStudy-API\Node_Modules\Sequelize\lib\Model.js:619:53)在C:\users\IK\Documents\GetStudy-API\Node_Modules\Sequelize\lib\Model.js:516:37在 在_DrainQueueStep(C:\Users\IK\Documents\GetStudy-API\Node_Modules\Bluebird\JS\Release\Async.JS:93:12)处的_DrainQueue(C:\Users\IK\Documents\GetStudy-API\Node_Modules\Bluebird\JS\Release\Async.JS:86:9)处的


共1个答案

匿名用户

在初始化sequelize连接的index.js文件中,需要调用关联函数。

//index.js
const UserModel = require('./models/user');
const RoleModel = require('./models/role');
const Sequelize = require('sequelize');
const sequelize = new Sequelize(
    process.env.DB_NAME, 
    process.env.DB_USER,
    process.env.DB_PASS, {
    host: process.env.DB_HOST,
    dialect: process.env.DB_DIALECT
}); //initialize connection as needed

let models = {}
sequelize.authenticate().then(function(){
  const User = UserModel(sequelize, Sequelize);
  const Role = RoleModel(sequelize, Sequelize);
  User.associate(); //make sure you are calling this
  Role.associate(); 
  models = {User, Role}
})
module.exports = {models, sequelize}

查询应按预期运行。