2016-01-02 3 views
13

Ich entwickle eine sails.js App mit sequelize ORM. Ich bin ein wenig verwirrt, wenn BelongsTo und HasOne verwendet werden müssen.Unterschied zwischen HasOne und BelongsTo in Sequelize ORM

Die Dokumentation heißt es:

Gehört Verbände Verbände sind, wo der Fremdschlüssel für die Eins-zu-Eins-Beziehung auf dem Modell Quelle vorhanden ist.

hasOne Verbände sind Verbände, in denen der Fremdschlüssel für die Eins-zu-Eins-Beziehung auf dem Modell Ziel existiert.

Gibt es einen anderen Unterschied abgesehen von dem Ort, wo diese angegeben sind? Ist das Verhalten in beiden Fällen immer noch gleich?

Antwort

24

Dies ist ein universelles Problem.

Der Hauptunterschied besteht in semantischen. Sie müssen entscheiden, was die Beziehung ist (Einige dumme Beispiel):

Der Mensch hat nur einen rechten Arm. Der rechte Arm gehört einem Mann.

sagen es sieht umgekehrt ein wenig seltsam:

rechten Arm einen Mann hat. Ein Mann gehört zum rechten Arm.

Sie können Menschen ohne rechten Arm haben. Aber allein der rechte Arm ist nutzlos.

In sequelize wenn RightArm und Männer Modelle sind, kann es sieht aus wie:

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

Und wie Sie es bemerken ist auch Unterschied in der db-Tabellenstruktur:

Gehört das foreignKey auf der hinzufügen Quelle, in der hasOne das Ziel hinzufügt (Sequelize erstellt die neue Spalte 'ManId' in der Tabelle 'RightArm', aber nicht die 'RightArmId' Spalte in der 'Man' Tabelle).

Ich sehe keine Unterschiede mehr.

+0

In diesem Fall sollte ich entweder 'Man.hasOne (RightArm);' oder 'RightArm.belongsTo (Man);'? Oder benutze sie beide? –

+0

In den meisten Fällen würde ich beide verwenden –

Verwandte Themen