LoginSignup
7
8

More than 5 years have passed since last update.

【Sequelize】foreignKeyとtargetKey

Posted at

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8