javascript - Sequelize 数据库错误列名不存在
问题描述
问题是findAll
产品选择的列不存在“PermissionId”
我不明白为什么 sequelize 会生成这个专栏。
错误是:
未处理的拒绝 SequelizeDatabaseError:在 /home 的 Query.formatError (/home/baptiste/IUT2/ProjetS3/code/M3301/node_modules/sequelize/lib/dialects/postgres/query.js:366:16) 中不存在列“PermissionId” /baptiste/IUT2/ProjetS3/code/M3301/node_modules/sequelize/lib/dialects/postgres/query.js:72:18 at tryCatcher (/home/baptiste/IUT2/ProjetS3/code/M3301/node_modules/bluebird/js/ release/util.js:16:23) 在 Promise._settlePromiseFromHandler (/home/baptiste/IUT2/ProjetS3/code/M3301/node_modules/bluebird/js/release/promise.js:547:31) 在 Promise._settlePromise (/ home/baptiste/IUT2/ProjetS3/code/M3301/node_modules/bluebird/js/release/promise.js:604:18) 在 Promise._settlePromise0 (/home/baptiste/IUT2/ProjetS3/code/M3301/node_modules/bluebird/ js/release/promise.js:649:10) 在 Promise._settlePromises (/home/baptiste/IUT2/ProjetS3/code/M3301/node_modules/bluebird/js/release/promise.js:725:18) 在 _drainQueueStep (/home/baptiste/IUT2/ProjetS3/code/ M3301/node_modules/bluebird/js/release/async.js:93:12) 在 _drainQueue (/home/baptiste/IUT2/ProjetS3/code/M3301/node_modules/bluebird/js/release/async.js:86:9)在 Async._drainQueues (/home/baptiste/IUT2/ProjetS3/code/M3301/node_modules/bluebird/js/release/async.js:102:5) 在 Immediate.Async.drainQueues [as _onImmediate] (/home/baptiste/ IUT2/ProjetS3/code/M3301/node_modules/bluebird/js/release/async.js:15:14) 在 processImmediate (internal/timers.js:439:21)18) 在 _drainQueueStep (/home/baptiste/IUT2/ProjetS3/code/M3301/node_modules/bluebird/js/release/async.js:93:12) 在 _drainQueue (/home/baptiste/IUT2/ProjetS3/code/M3301/ node_modules/bluebird/js/release/async.js:86:9) 在 Async._drainQueues (/home/baptiste/IUT2/ProjetS3/code/M3301/node_modules/bluebird/js/release/async.js:102:5)在 Immediate.Async.drainQueues [as _onImmediate] (/home/baptiste/IUT2/ProjetS3/code/M3301/node_modules/bluebird/js/release/async.js:15:14) 在 processImmediate (internal/timers.js:439 :21)18) 在 _drainQueueStep (/home/baptiste/IUT2/ProjetS3/code/M3301/node_modules/bluebird/js/release/async.js:93:12) 在 _drainQueue (/home/baptiste/IUT2/ProjetS3/code/M3301/ node_modules/bluebird/js/release/async.js:86:9) 在 Async._drainQueues (/home/baptiste/IUT2/ProjetS3/code/M3301/node_modules/bluebird/js/release/async.js:102:5)在 Immediate.Async.drainQueues [as _onImmediate] (/home/baptiste/IUT2/ProjetS3/code/M3301/node_modules/bluebird/js/release/async.js:15:14) 在 processImmediate (internal/timers.js:439 :21)_drainQueues (/home/baptiste/IUT2/ProjetS3/code/M3301/node_modules/bluebird/js/release/async.js:102:5) 在 Immediate.Async.drainQueues [as _onImmediate] (/home/baptiste/IUT2/ProjetS3 /code/M3301/node_modules/bluebird/js/release/async.js:15:14) 在 processImmediate (internal/timers.js:439:21)_drainQueues (/home/baptiste/IUT2/ProjetS3/code/M3301/node_modules/bluebird/js/release/async.js:102:5) 在 Immediate.Async.drainQueues [as _onImmediate] (/home/baptiste/IUT2/ProjetS3 /code/M3301/node_modules/bluebird/js/release/async.js:15:14) 在 processImmediate (internal/timers.js:439:21)
迁移代码:
Utilisateurs 表
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Utilisateurs', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
adresseMail: {
type: Sequelize.STRING
},
nomUtilisateur: {
type: Sequelize.STRING
},
dateDeNaissance: {
type: Sequelize.STRING
},
motDePasse: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
},
idPermission: {
type: Sequelize.INTEGER,
references: {
model: {
tableName: 'Permissions',
schema: 'public'
},
key: 'id'
}
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Utilisateurs');
}
};
权限表
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Permissions', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
estRegatier: {
type: Sequelize.BOOLEAN
},
estJury: {
type: Sequelize.BOOLEAN
},
estOrganisateur: {
type: Sequelize.BOOLEAN
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Permissions');
}
};
```
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Permissions', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
estRegatier: {
type: Sequelize.BOOLEAN
},
estJury: {
type: Sequelize.BOOLEAN
},
estOrganisateur: {
type: Sequelize.BOOLEAN
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Permissions');
}
};
```
models code :
**Utilisateur**
```'use strict';
module.exports = (sequelize, DataTypes) => {
const Utilisateurs = sequelize.define('Utilisateur', {
adresseMail: DataTypes.STRING,
nomUtilisateur: DataTypes.STRING,
dateDeNaissance: DataTypes.STRING,
motDePasse: DataTypes.STRING,
idPermission: DataTypes.INTEGER
}, {});
Utilisateurs.associate = function (models) {
Utilisateurs.belongsTo(models.Permission);
Utilisateurs.hasMany(models.Licencie);
};
return Utilisateurs;
};
允许
'use strict';
module.exports = (sequelize, DataTypes) => {
const Permission = sequelize.define('Permission', {
estRegatier: DataTypes.BOOLEAN,
estJury: DataTypes.BOOLEAN,
estOrganisateur: DataTypes.BOOLEAN
}, {});
Permission.associate = function (models) {
Permission.hasMany(models.Utilisateur);
};
return Permission;
};
解决方案
你可以这样尝试:
module.exports = (sequelize, DataTypes) => {
const Utilisateurs = sequelize.define('Utilisateur', {
adresseMail: DataTypes.STRING,
nomUtilisateur: DataTypes.STRING,
dateDeNaissance: DataTypes.STRING,
motDePasse: DataTypes.STRING,
// idPermission: DataTypes.INTEGER **I belive you must remove this line!
}, {});
Utilisateurs.associate = function (models) {
Utilisateurs.belongsTo(models.Permission, { foreignKey: 'idPermission'});
Utilisateurs.hasMany(models.Licencie);
};
return Utilisateurs;
};
我尝试为该表指定foreign_PK,默认情况下,sequelize 将尝试PermissionId,但您的密钥是idPermission。
请为我糟糕的英语道歉!
推荐阅读
- django - 如何仅允许条目的作者在 UpdateView 逻辑中对其进行编辑
- pact - 契约经纪人:无法在 http://localhost:8080/ 中看到契约经纪人屏幕
- php - 如何使用 PHP 将 UNIX 时间戳插入 Oracle 数据库
- python - 重新分片许多大的 csv 文件以使每个分片具有相同的行数
- nestjs - NestJS:Graphql Resolver 查询不注入复杂类型,它是空的
- sql - 如何生成字段等于“Dayofweek”、“weekofyear”等的日期表;并且行等于从 2010-01-01 到 current_date 的日期
- php - 如果我想在 PHP 中将一个单词移动到数组的末尾,如何使用函数?
- html - 在背景上水平和垂直居中 DIV
- java - VSCode中如何修复Java文件版本和编译版本不同
- powerbi - 使用 PowerBI 跟踪自定义策略注册/登录到 AD B2C