我一直在浪费时间。我有很多来源,它们都差不多,但我就是无法让我的项目发挥作用。
Sequelize.js - "is not associated to" 这个问题与我的非常相似,但是,我的这个问题不应该重复。因为它肯定有一个新问题!
列出我的资料来源,我已经仔细阅读并尝试过的资料:
为了添加上下文,我试图提供一个让用户获取他们的个人资料的路线。每个用户只有一个 Angular 色。
像这样:
{
id: 4,
email: 'adsads@saas.com',
role: {
id: 2,
name: 'admin'
}
}
将 findOne 与 WHERE 和 INCLUDE 一起使用
exports.getme = (req, res) => {
db.users.findOne({
where: { id: req.user.id },
include: [{
model: db.roles,
}]
})
.then(data => {
res.send(data)
})
.catch(err => {
console.log(err)
res.status(500).send({
message: "An error has occured while retrieving data."
})
})
}
我得到的错误是:
Role is not associated to User!
这是模型,以及我如何放置它们各自的关联:
Angular 色.js
'use strict';
module.exports = (sequelize, DataTypes) => {
const Role = sequelize.define('Role', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: "id"
},
role: DataTypes.STRING
}, {
timestamps: false
});
Role.associate = function (models) {
Role.hasMany(models.User, {
foreignKey: "roleId",
sourceKey: "id"
})
}
return Role;
};
User.js
'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
id: { type: DataTypes.BIGINT, allowNull: false, autoIncrement: true, unique: true, primaryKey: true },
email: DataTypes.STRING,
}, {});
User.associate = function (models) {
User.belongsTo(models.Role, {
foreignKey: "roleId",
targetKey: "id"
});
}
return User
}
此外,当我检查我的表的 关系 时,我只能在我的 USER 表中看到详细信息,而在我的 ROLES 表中没有看到详细信息。
编辑:评论部分的 Anatoly 指出,当
db.users
启动时,findOne
似乎没有关联。以下是我在 server.js
中设置模型的方法:....
const db = require("./app/models")
if (process.env.NODE_ENV === "production") {
db.sequelize.sync().then(() => {
useRoutes()
seedDB()
})
} else {
db.sequelize.sync({ force: true }).then(() => {
console.log("Drop and re-sync db.")
useRoutes()
seedDB()
})
}
function useRoutes() {
console.log("Use routes...")
require("./app/routes/user/user.routes")(app)
require("./app/routes/emojis/emojis.routes")(app)
require("./app/routes/auth/auth.routes")(app)
const db = require("./app/models")
// Custom.
db.op = db.Sequelize.Op
// Models
db.appsettings = require("./app/models/appsettings/appsettings.model")(db.sequelize, db.Sequelize)
db.countries = require("./app/models/appsettings/country.model")(db.sequelize, db.Sequelize)
db.users = require("./app/models/user/user.model")(db.sequelize, db.Sequelize)
db.roles = require("./app/models/user/role.model")(db.sequelize, db.Sequelize)
db.userscores = require("./app/models/user/userscore.model")(db.sequelize, db.Sequelize)
db.answers = require("./app/models/game/answer.model")(db.sequelize, db.Sequelize)
db.categories = require("./app/models/game/category.model")(db.sequelize, db.Sequelize)
db.questions = require("./app/models/game/question.model")(db.sequelize, db.Sequelize)
db.useracoomplishedquestions = require("./app/models/game/useracoomplishedquestion.model")(db.sequelize, db.Sequelize)
}
模型/index.js (由 Sequelize 生成,我对其进行了一些修改,并使用
glob
轻松扫描子文件夹)'use strict';
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config')[env];
const db = {};
const glob = require("glob")
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(config.database, config.username, config.password, config);
}
// Use glob to access model files inside subfolders.
const files = glob.sync(__dirname + "/*/*.js")
files.forEach(file => {
const model = sequelize['import'](file);
db[model.name] = model;
})
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
最佳答案
通过这段代码
// Models
db.appsettings = require("./app/models/appsettings/appsettings.model")(db.sequelize, db.Sequelize)
db.countries = require("./app/models/appsettings/country.model")(db.sequelize, db.Sequelize)
db.users = require("./app/models/user/user.model")(db.sequelize, db.Sequelize)
db.roles = require("./app/models/user/role.model")(db.sequelize, db.Sequelize)
db.userscores = require("./app/models/user/userscore.model")(db.sequelize, db.Sequelize)
db.answers = require("./app/models/game/answer.model")(db.sequelize, db.Sequelize)
db.categories = require("./app/models/game/category.model")(db.sequelize, db.Sequelize)
db.questions = require("./app/models/game/question.model")(db.sequelize, db.Sequelize)
db.useracoomplishedquestions = require("./app/models/game/useracoomplishedquestion.model")(db.sequelize, db.Sequelize)
您覆盖了在 models/index.js 中注册的模型定义,这就是这些模型没有关联的原因。只需删除这些行。
关于javascript - Sequelize 模型与模型无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61718082/