sequelize

【Sequelize】foreignKeyとtargetKey

Sequelize

  • Node.jsで動く、MySQLやPostgreSQLのトランザクションやリレーションなどをサポートするORMです
  • 参考:http://docs.sequelizejs.com

このページで書くこと

  • 主にリレーションの際のforeignKeyとtargetKeyについて

リレーションの基本の書き方

MODEL1.RELATION(MODEL2)
  • MODEL1のことを"source"、MODEL2のことを"target"という

belongsTo

User.belongsTo(WorkingGroup)
  • sourceに外部キー(WorkingGroupId)が追加される

hasOne

User.hasOne(UserInfo)
  • targetに外部キー(UserId)が追加される

hasMany

Project.hasMany(User)
  • targetに外部キー(ProjectId)が追加される

belongsToMany

Project.belongsToMany(User, {through: 'UserProjects'});

User.belongsToMany(Project, {through: 'UserProjects'});
  • throughで指定した名前のテーブルに双方のキーが追加される

foreignKey

  • foreignKeyの名前を任意に変更する
  • 上記のようにリレーションを書くことによってできるforeignKeyは大文字始まりのキャメルケースになる
  • 自動的にできるforeignKeyの名前は以下のような書き方で変更できる(Userテーブルに"work_group"というforeignKeyが追加されることになる)

    User.belongsTo(WorkingGroup, {foreignKey: 'work_group'})
    

targetKey

  • foreignKeyをprimaryKeyから任意のカラムに変更する
  • デフォルトのforeignKeyはtarget(もしくはsource)のprimaryKeyになる
  • 以下の書き方でforeignKeyを変更できる(WorkingGroupテーブルの"name"カラムをUserテーブルのforeignKeyの"workGroup"に指定できる)

    User.belongsTo(WorkingGroup, {foreignKey: 'work_group', targetKey: 'name'})