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