【问题标题】:Sequelize trying to associate User and Roles (mysql2)Sequelize 尝试关联用户和角色(mysql2)
【发布时间】:2021-06-21 19:53:15
【问题描述】:

我正在尝试关联用户和角色,以便为用户分配角色。当我尝试添加用户时,我不断收到错误,如果没有关联,它将起作用,但我想关联它们。

这是我的用户模型

'use strict';
module.exports = (sequelize, DataTypes) => {
    const User = sequelize.define("User", {
        user_id: {
            type: DataTypes.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        username: {
            type: DataTypes.STRING,
            allowNull: false
        },
        email: {
            type: DataTypes.STRING,
            allowNull: false
        },
        password: {
            type: DataTypes.STRING,
            allowNull: false
        },
        first_name: {
            type: DataTypes.STRING,
            allowNull: false
        },
        last_name: {
            type: DataTypes.STRING,
            allowNull: false
        },
        img_src: DataTypes.STRING,
        //updated_at: DataTypes.DATE,
        status: { 
            type: DataTypes.INTEGER,
            defaultValue: 1
        },
        //active: DataTypes.BOOLEAN
    },
    {
        timestamps: true,
        underscored: false,
        freezeTableName: true,
        tableName: 'user'
    });
    User.associate = (models) => {
        User.belongsTo(models.Role, { foreignKey: 'role_id'})};
        
    return User;
}

这是我的榜样

module.exports = (sequelize, DataTypes) => {
    const Role = sequelize.define('Role', {
        role_id: {
            type: DataTypes.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        title: DataTypes.STRING,
        description: DataTypes.STRING
    },
    {
        timestamps: true,
        underscored: false,
        freezeTableName: true,
        tableName: 'role',
        initialAutoIncrement: 2000
    });
    Role.associate = (models) => {
        Role.hasMany(models.User, { as: 'users', foreignKey: 'user_id' })};

    return Role;
}

当我尝试添加用户时,这是我在终端中遇到的错误

UnhandledPromiseRejectionWarning: SequelizeForeignKeyConstraintError: Cannot add or update a child row: a foreign key constraint fails (`e2e-react-db`.`user`, CONSTRAINT `user_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `role` (`role_id`) ON DELETE CASCADE ON UPDATE CASCADE)

【问题讨论】:

  • 我认为您不必将角色与用户相关联,请在用户模型上执行相反的操作:User.associate = (models) => { User.hasOne(models.Role, { foreignKey: 'user_id' })};
  • @ThiagoRobles 它仍然给我同样的错误。
  • 好吧,想得更好,我想最好的方法是在 User 模型上添加一个名为 role_id 的新列,以及关联:User.associate = (models) => { User.hasOne(models.Role, { foreignKey: 'role_id' })}; 删除所有其他关联。我建议您还原所有迁移,进行我所说的这些更改,然后再次运行迁移
  • @ThiagoRobles 嘿,谢谢!现在可以了!
  • 好的,我来回答这个问题

标签: node.js express sequelize.js associations mysql2


【解决方案1】:

我想最好的方法是在 User 模型上添加一个名为 role_id 的新列,以及关联:

User.associate = (models) => { User.hasOne(models.Role, { foreignKey: 'role_id' })};

删除所有其他关联。我建议您还原所有迁移,进行我所说的这些更改,然后再次运行迁移

【讨论】:

    猜你喜欢
    • 2016-08-22
    • 2021-04-30
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多