2017-09-04 29 views
0

私には2つの主キーがあるUSERSテーブルがあります:idとmail、ユーザーは別のテーブルの連絡先と1:1の関係を持っています。私はRefreshTokenテーブルの2つの外部キーをメールとIDに関連して "エクスポート"したいと思います。Sequelize + Nodejs内に複数の外部キーがあります

USERSテーブルの定義:

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テーブル定義:

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' 
    }); 

答えて

0

私はあなたのコードを見ずに100%わからないんだけど、私はあなたがしているものだと思いますしようとしているのはこれです

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' }) 

これは連絡先表に2つの列、userIdotherIdの両方にユーザー表を参照する必要があります。

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; 
} 

どのように上のsequelizeのドキュメントを読んでみてください、私はあなたがsequelize v3のスタイルを使用している気づい:次のようになります。あなたがやろうとしている可能性がありますどのようなsomeUser.getContact()someUser.getOther()

+0

私はより完全な質問をしました! – tinytanks

0

を呼び出すことができるはずです現在サポートされているバージョンであるv4に移行します。

+0

このエラーが表示されます。未処理の拒否エラー:SequelizeDatabaseError:ER_CANNOT_ADD_FOREIGN:外部キー制約を追加できません – tinytanks

+0

sequelizeドキュメントを読む –

関連する問題