sequelizeを学習しているのですが、公式ドキュメントを読んでいて理解できないところがあるので、もし分かる方がいましたらご教示いただきたいです。
以下のソースコードと説明は公式ドキュメントにあるHasOneの説明の一部を抜粋したものです。
javascript
1Team.hasOne(Game, {as: 'HomeTeam', foreignKey : 'homeTeamId'}); 2Team.hasOne(Game, {as: 'AwayTeam', foreignKey : 'awayTeamId'}); 3 4Game.belongsTo(Team);
Even though it is called a HasOne association, for most 1:1 relations you usually want the BelongsTo association since BelongsTo will add the foreignKey on the source where hasOne will add on the target.
不明点は以下です。
このソースコードの例で、まずTeam.hasOne(Game)
と定義しているので、GameにforeignKeyが追加されることは分かります。しかし、なぜそれだけではダメでGame.belongsTo(Team)
とセットで記述しなければならないのでしょうか。
自分は、Game.belongsTo(Team)
ではGameにforeignKeyが追加されると思っています。
そしてTeam.hasOne(Game)
もGameにforeignKeyが追加されると思っています。
なので、どちらも同じ意味になり、2重で同じことを定義しているのではないか?と解釈してしまっています。
もし解説していただける方がいましたら、ぜひ教えていただけると非常に嬉しいです。
何卒よろしくお願いいたします。
0501以下追記
ふと思ったのですが、もしかするとTeam.hasOne(Game)
だけでは以下のようなできること、できないことがあるため、Game.belongsTo(Team)
とセットで使う必要があるのかもしれません。
Team.hasOne(Game)
だけだと、アクセサTeam.getGame
を用いてteamからGameを取得することはできますが、gameからTeamを取得することはできません。
なので、Game.belongsTo(Team)
も追加で記述することにより、アクセサGame.getTeam
が使えるようになり、GameからでもTeamを取得できるようになるのでセットで使うのではないかと考えました。
分かる方いましたら、ご教示いただけますと幸いです。
よろしくお願いいたします。
あなたの回答
tips
プレビュー