2017-09-04 1 views
0

Ich habe eine USERS-Tabelle, in der gibt es zwei Primärschlüssel: ID und Mail, Benutzer hat eine Beziehung 1: 1 mit einer anderen Tabelle Kontakte. Ich möchte zwei Fremdschlüssel in der RefreshToken-Tabelle, die auf Mail und ID verweist, "exportieren".Mehrere Fremdschlüssel in Sequelize + Nodejs

NUTZER Tabellendefinition:

module.exports = function (sequelize, DataTypes) { 
    const Users = sequelize.define('Users', { 
    id: { 
     type: DataTypes.INTEGER(11), 
     autoIncrement: true, 
     primaryKey: true 
    }, 
    firstname: { 
     type: DataTypes.STRING, 
     allowNull: true 
    }, 
    lastname: { 
     type: DataTypes.STRING, 
     allowNull: true 
    }, 
    email: { 
     type: DataTypes.STRING, 
     allowNull: false, 
     primaryKey: true 
    }, 
    password: { 
     type: DataTypes.STRING, 
     allowNull: false 
    } 
    }, { 
    classMethods: { 
     associate: function (models) { 
     Users.hasOne(models.RefreshToken, {foreignKey:'userId'} 
     } 
    }, 
    tableName: 'Users', 
    hooks: { 
     beforeCreate: user => { 
     const salt = bcrypt.genSaltSync(); 
     user.password = bcrypt.hashSync(user.password, salt); 
     } 
    } 
    }); 

RefreshToken Tabellendefinition:

module.exports = function (sequelize, DataTypes) { 
    const RefreshToken = sequelize.define('RefreshToken', { 
    idRefreshToken: { 
     type: DataTypes.INTEGER(11), 
     autoIncrement: true, 
     primaryKey: true 
    }, 
    token: { 
     type: DataTypes.TEXT, 
     allowNull: true 
    }, 
    expire: { 
     type: DataTypes.DATE, 
     allowNull: true 
    } 

    }, { 
    tableName: 'RefreshToken' 
    }); 

Antwort

0

ich ohne einen Blick auf den Code nicht zu 100% bin sicher, aber ich denke, was du bist versuchen zu tun ist dies

db.define('user', {/* ... */}); 
db.define('contact', {/* ... */}); 

db.model('contact').belongsTo(db.model('user'), { as: 'contact' }) 
db.model('contact').belongsTo(db.model('user'), { as: 'other' }) 
db.model('user').hasOne(db.model('user'), { as: 'contact' }) 
db.model('user').hasOne(db.model('user'), { as: 'other' }) 

Dies sollte der Kontakttabelle zwei Spalten geben, userId und otherId, die beide die Benutzertabelle referenzieren. Sie sollten in der Lage sein someUser.getContact() anrufen und someUser.getOther()

+0

Ich habe meine Frage vervollständigt! – tinytanks

0

Was Sie könnten versuchen, wie dies zu tun aussehen könnte:

module.exports = function (sequelize, DataTypes) { 
    const Users = sequelize.define('Users', { 
    id: { 
     type: DataTypes.INTEGER(11), 
     autoIncrement: true, 
     primaryKey: true 
    }, 
    firstname: { 
     type: DataTypes.STRING, 
     allowNull: true 
    }, 
    lastname: { 
     type: DataTypes.STRING, 
     allowNull: true 
    }, 
    email: { 
     type: DataTypes.STRING, 
     allowNull: false, 
     primaryKey: true 
    }, 
    password: { 
     type: DataTypes.STRING, 
     allowNull: false 
    } 
    }); 

    Users.associate = (models) => { 
    Users.belongsTo(models.RefreshToken, { 
     foreignKey: 'userId' 
    }); 
    Users.belongsTo(models.RefreshToken, { 
     foreignKey: 'email' 
    }); 
    }; 

    return Users; 
} 

ich bemerkt, dass Sie sequelize v3 Stil verwenden, versuchen die sequelize docs lesen, wie man migrieren nach v4, was derzeit unterstützt wird.

+0

Ich erhalte diesen Fehler: Unbehandelte Ablehnung Fehler: SequelizeDatabaseError: ER_CANNOT_ADD_FOREIGN: Kann keine Fremdschlüsseleinschränkung hinzufügen – tinytanks

+0

versuchen Sie, die Sequelize-Dokumente zu lesen –

Verwandte Themen