我有属于某个应用的展示位置。展示位置表上的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?
答案 0 :(得分:0)
嗯...我的代码没错。您正在使用哪个版本的Sequelize?
仅几条无关的评论:
您不需要导入App,它已经在models对象中。
我认为您也不需要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可以自动处理模型之间的所有关系。