我不知道我的代码出了什么问题
模型角色
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)处的
在初始化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}
查询应按预期运行。