Sequelize 模型关联不会创建新列

Gle*_*enn 2 javascript node.js sequelize.js

为什么在我的某些模型中,sequelize WON\xe2\x80\x99T 为foreignkey创建一个新列?但它确实为其他模型创建了???它\xe2\x80\x99s令人沮丧和奇怪。例如,在此 User 模型中,sequelize won\xe2\x80\x99t create role_id

\n\n
\'use strict\';\nmodule.exports = (sequelize, DataTypes) => {\n  const User = sequelize.define(\'User\', {\n    id: { type: DataTypes.BIGINT, allowNull: false, autoIncrement: true, unique: true, primaryKey: true },\n    first_name: DataTypes.STRING,\n    last_name: DataTypes.STRING\n  }, {});\n  User.associate = function(models) {\n    User.belongsTo(models.Role, { foreignKey: \'role_id\' });\n  };\n  return User;\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

这是一个类似的问题:Sequelize not 创建模型关联列但是!没有得到答复。

\n\n

我花了几个小时在这上面,我做了如下的事情:

\n\n
    \n
  1. 彻底阅读: https: //sequelize.org/master/manual/assocs.html
  2. \n
  3. 进行实验,例如创建一个名为 的新虚拟模型NewUser。有用!但同样没有User名字。
  4. \n
  5. 发布在 Sequelize 的 Slack 频道上。
  6. \n
\n\n

在这个 Stackoverflow 问题之后,我会从他们的 Github 的问题页面寻求帮助。

\n\n

我想我可以只定义列role_id而不是通过associate函数添加它。

\n

Ana*_*oly 6

所有模型都应该在一个地方注册,只要它们的关联:

数据库.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) {
    // Sequelize version <= 5.x
    var model = sequelize['import'](path.join(models, file))
    // Sequelize version >= 6.x
    // var model = require(path.join(models, file))(
    //   sequelize,
    //   Sequelize.DataTypes
    // );
    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

Run Code Online (Sandbox Code Playgroud)

一些_模块.js

const db = require('../database')
...
const users = await db.user
   .findAll({
     where: {
      [db.Sequelize.Op.or]: [{
        first_name: 'Smith'
      }, {
        last_name: 'Smith'
      }]
     }
})

Run Code Online (Sandbox Code Playgroud)