【问题标题】:Problem with Sequelize and specifying foreign key in an associationSequelize 和在关联中指定外键的问题
【发布时间】:2019-05-31 05:33:53
【问题描述】:

我有属于某个应用的展示位置。展示位置表上的 foreign_key 是 appId(不是 AppId)。我指定如下,但得到错误:

Unhandled rejection SequelizeDatabaseError: column Placements.AppId does not exist

我的展示位置模型:

'use strict';
const App = require('./').App

module.exports = (sequelize, DataTypes) => {
  const Placement = sequelize.define('Placement', {
    name: DataTypes.STRING,

    isActive: DataTypes.BOOLEAN,
  }, {
    tableName: 'placements'
  });
  Placement.associate = function(models) {
    Placement.belongsTo(models.App, { foreignKey: 'appId'})

    // associations can be defined here
  };
  return Placement;
};

我如何告诉 Sequelize foreignKey 是 appId 而不是 AppId?

【问题讨论】:

    标签: node.js express sequelize.js


    【解决方案1】:

    嗯...我认为您的代码没有任何问题。您使用的是哪个版本的 Sequelize?

    只是几个不相关的 cmets:

    1. 你不需要导入App,它已经在models对象中了。

    2. 我认为您也不需要 tableName 参数。

    【讨论】:

      【解决方案2】:

      尝试使用字段属性

      Placement.belongsTo(models.App, { 
          foreignKey: {
              name: 'AppId',
              field: 'appId'
              }
          }
      )
      

      【讨论】:

        【解决方案3】:

        您需要在 App 模型中显示 AppId 列。将{ foreignKey: 'appId'}) 显式传递给belongsTo 会使Sequelize 按原样使用密钥。

        所以你需要创建一个 App 模型 -

        const App = sequelize.define('App', {
        AppId: DataTypes.INTEGER,
        ..
        
        }, {
        tableName: 'App'
        });
        

        另一种选择是改变这一点

        Placement.belongsTo(models.App, { foreignKey: 'appId'})

        Placement.belongsTo(models.App)

        这样 Sequelize 会自动处理模型之间的所有关系。

        【讨论】:

          猜你喜欢
          • 2021-07-25
          • 2012-11-24
          • 1970-01-01
          • 1970-01-01
          • 2018-03-08
          • 2021-01-24
          • 1970-01-01
          • 2021-04-21
          • 1970-01-01
          相关资源
          最近更新 更多