2016-01-02 19 views
13

sequelize ORMのsails.jsアプリを開発中です。私は、BelongsToとHasOneを使用する必要があるときは少し混乱しています。Sequelize ORMのHasOneとBelongsToの違い

ドキュメントはと述べている:

belongsToのアソシエーションは 1対1の関係の外部キーは、ソースモデル上に存在する関連付けです。

HasOneアソシエーションは、 の外部キーがターゲットモデルに存在するアソシエーションです。

これらが指定されている場所以外に他に何か相違はありますか?いずれの場合も、その行動は依然として同じであるか?

答えて

24

これはより普遍的な問題です。

主な違いは意味的です。あなたは関係(何らかの愚かな例)を決める必要があります:

男は右腕が1つしかありません。右腕は1人の男性に属します。

それが逆少し奇妙に見えると言っ:

右腕が男を持っています。男は右腕に属しています。

右腕を持たない男性もいます。しかし、右腕だけでは役に立たない。 sequelizeで

RightArmと男性はモデルがある場合は、それかもしれない次のようになります。

Man.hasOne(RightArm); 
RightArm.belongsTo(Man); 

とDBテーブルの構造の違いもあり、あなたが気づくよう:

belongsToのは、上のForeignKeyを追加するには、 sourceはhasOneがターゲットに追加されます(Sequelizeはテーブル 'RightArm'に新しいカラム 'ManId'を作成しますが、 'Man'テーブルには 'RightArmId'カラムを作成しません)。

これ以上の違いはありません。

+0

この場合、 'Man.hasOne(RightArm);または' RightArm.belongsTo(Man); 'を使用する必要がありますか?または両方を使用しますか? –

+0

ほとんどの場合、私は両方を使用します –

関連する問題