在关联中指定并指定外键的问题

时间:2019-05-16 00:09:42

标签: node.js express sequelize.js

我有属于某个应用的展示位置。展示位置表上的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外键是appId而不是AppId?

3 个答案:

答案 0 :(得分:0)

嗯...我的代码没错。您正在使用哪个版本的Sequelize?

仅几条无关的评论:

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

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

答案 1 :(得分:0)

尝试使用field属性

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

答案 2 :(得分:0)

您需要在App模型中显示AppId列。明确地将{ foreignKey: 'appId'})传递给EmiratesTo使得Sequelize照原样使用密钥。

因此,您需要创建一个具有-

的App模型
const App = sequelize.define('App', {
AppId: DataTypes.INTEGER,
..

}, {
tableName: 'App'
});

另一种选择是更改

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

Placement.belongsTo(models.App)

通过这种方式,Sequelize可以自动处理模型之间的所有关系。