[英]Sequelize model association won't create a new column
为什么在我的某些模型中,sequelize 不会为foreignkey创建新列? 但它确实为其他模型创建??? 这令人沮丧和奇怪。 例如,在这个用户 model 中,sequelize 不会创建role_id
。
'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
id: { type: DataTypes.BIGINT, allowNull: false, autoIncrement: true, unique: true, primaryKey: true },
first_name: DataTypes.STRING,
last_name: DataTypes.STRING
}, {});
User.associate = function(models) {
User.belongsTo(models.Role, { foreignKey: 'role_id' });
};
return User;
};
这是一个类似的问题: Sequelize not Creating model association columns BUT。 没有人回答。
我花了几个小时在这上面,我做了所有的事情,比如:
NewUser
。 有用! 但同样不是User
名。在这个 Stackoverflow 问题之后,我将从他们的 Github 问题页面寻求帮助。
我想我可以只定义列role_id
而不是通过associate
的 function 添加它。
所有模型都应在一个地方注册,只要它们的关联:
数据库.js
const fs = require('fs')
const path = require('path')
const Sequelize = require('sequelize')
const db = {}
const models = path.join(__dirname, 'models') // correct it to path where your model files are
const sequelize = new Sequelize(/* your connection settings here */)
fs
.readdirSync(models)
.filter(function (file) {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js')
})
.forEach(function (file) {
var model = sequelize['import'](path.join(models, file))
db[model.name] = model
})
Object.keys(db).forEach(function (modelName) {
if (db[modelName].associate) {
db[modelName].associate(db)
}
})
db.Sequelize = Sequelize // for accessing static props and functions like Op.or
db.sequelize = sequelize // for accessing connection props and functions like 'query' or 'transaction'
module.exports = db
some_module.js
const db = require('../database')
...
const users = await db.user
.findAll({
where: {
[db.Sequelize.Op.or]: [{
first_name: 'Smith'
}, {
last_name: 'Smith'
}]
}
})
感谢 Anatoly 一直关注我关于 Sequelize 的问题。
经过这么多的试验和错误,我认为问题是由我的路线注册引起的,例如:
require("./app/routes/user/user.routes")(app)
在我的app.js或server.js中。 这些路由注册是在db.sync
之前添加的!
所以我所做的是,我在db.sync
之后调用这些路由注册,如下所示:
const db = require("./app/models")
if (process.env.NODE_ENV === "production") {
db.sequelize.sync().then(() => {
useRoutes()
})
} else {
db.sequelize.sync({ force: true }).then(() => {
console.log("Drop and re-sync db.")
useRoutes()
})
}
function useRoutes() {
console.log("Use routes...")
require("./app/routes/user/user.routes")(app)
require("./app/routes/auth/auth.routes")(app)
}
瞧,修好了!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.