首页 > 解决方案 > 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;
    };

标签: javascriptnode.jsexpresssequelize.jssequelize-cli

解决方案


你可以这样尝试:

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。

请为我糟糕的英语道歉!


推荐阅读