2017-12-07 3 views
1

Ich habe Sequelize für ein wenig verwendet, aber nie die Mühe, wirklich zu verstehen, wie foreignKey funktioniert tatsächlich. In ihrem Dokument geben sie Folgendes an:Sequelize Fremdschlüssel Ziel vs Quelle

Der Zielschlüssel ist die Spalte im Zielmodell, auf die die Fremdschlüsselspalte im Quellmodell zeigt.

Also in den folgenden Fällen, welches ist das Ziel?

Route.belongsTo(models.Subarea, { 
     foreignKey: 'subareaId', 
     as: 'subarea', 
    }); 

    Route.belongsToMany(models.Book, { 
     through: models.BookRoute, 
     foreignKey: 'routeId', 
     as: 'books', 
    }); 

Meine Verwirrung ist, warum in ersten Fall Ich habe foreignKey auf SubareaId, aber für die zweiten Fall hat ich es als RouteID. Sollte es in beiden Fällen nicht routeId sein, wenn foreignKey die sourceId sein sollte?

Antwort

1

Ich schlage vor, Argumentation in folgenden Schritten:

  1. Bestimmen Quelle und Ziel Modell. Das ist nur eine Konvention: Die Quelle ist das Modell, auf dem die Methode aufgerufen wird, also im Prinzip das, das in der Notation links steht. Das Ziel ist das andere Modell, also "dasjenige auf der rechten Seite".
  2. wissen wo verschiedene Methoden setzen die Fremdschlüssel: hasOne und hasMany Put fk auf Ziel; belongsTo setzt fk auf Quelle; belongsToMany setzt fk auf durch Modell.
  3. Verstehen Sie, dass der Fremdschlüssel (wie der Name schon sagt) sich auf "das andere Modell" bezieht (also nicht das unter 2). Also für hasOne und hasMany wird eine Referenz auf das Quellmodell sein; für belongsTo eine Referenz auf das Zielmodell; für belongsToMany eine Referenz auf das Quellenmodell (und Sie können das Zielmodell mit otherKey: referenzieren).

belongsToMany ist ein Sonderfall, da ein drittes Modell eingeführt wird: das Durch Modell (oder Tabelle beitreten), auf das sowohl die Fremdschlüssel zu der Quelle und das Ziel gespeichert werden. Dies ändert die 'Perspektive' für den Fremdschlüssel etwas und kann daher nicht vollständig mit belongsTo in Bezug auf Fremdschlüsselreferenzierung verglichen werden.

beantworten So Ihre Fragen:

  • , die das Ziel ?: Subarea ist, und buchen sind.
  • Welche Fremdschlüssel zu verwenden ?: Ihre Fremdschlüssel sind in Übereinstimmung mit oben Erklärung. belongsToMany ist außergewöhnlich, da Fremdschlüssel weder auf der Quelle noch auf dem Ziel gespeichert sind, sondern auf dem Durchgangsmodell.
Verwandte Themen