2016-06-18 11 views
1

Das Problem:einen Datensatz und einen zugehörigen Datensatz in einem Rutsch

Stellen Ich habe zwei zugehörigen Modelle, Library die vieleBook s hat:

var Library = sequelize.define('Library', { 
    title: Sequelize.STRING, 
    description: Sequelize.TEXT, 
    address: Sequelize.STRING 
}); 
var Book = sequelize.define('Book', { 
    title: Sequelize.STRING, 
    description: Sequelize.TEXT, 
    publish_date: Sequelize.DATE 
}); 
Library.hasMany(Book); 

Nun, um zu Erstellen Sie eine Library und eine einzige zugehörige Book, ich tun:

Die Frage:

Ist es möglich, ein Library und eine Book Instanz in einem Rutsch zu schaffen - in einem einzigen create() Anruf?

So etwas (mehr wie ein Pseudo-Code):

Library.create({ 
    name: 'Roan Library', 
    address: '123 Any St', 
    books: [ 
     { 
      title: 'Reading with Time', 
      description: 'A fun jaunt in reading', 
      libraryId: library.id 
     } 
    ] 
}); 
+1

Ohne die Identifikation mit des Elternelements ist die Beziehung unterbrochen. Also müssen Sie die Zeilen separat erstellen. Das Beste, was Sie tun können, ist, das Modell zu erweitern, indem Sie der Eigenschaft 'classMethods' eine Methode hinzufügen. Die Methode sollte dies hinter der Szene tun. Etwas wie 'Library.createAndThenCreateARelatedBook (...)' :) – undefined

+0

Korrektur: Verwandte/Eltern-Zeile und nicht "Elternelement" (das hat natürlich nichts mit DOM zu tun). – undefined

+0

@Vohuman Ich bin ziemlich neu zu sequelize, aber ich fürchte, Sie haben Recht - es macht im Allgemeinen Sinn. Fühlen Sie sich frei, es als Antwort zu posten. Vielen Dank. – alecxe

Antwort

1

kann Ihr gewünschtes Verhalten durch Hinzufügen dergleichen so zu den erstellen Parametern umfassen Option erreicht werden:

Library.create({ 
    name: 'Roan Library', 
    address: '123 Any St', 
    Books: [ 
     { 
      title: 'Reading with Time', 
      description: 'A fun jaunt in reading' 
     } 
    ] 
}, { 
    include : [Book] 
}); 
+0

Vielen Dank für die Antwort. Ich habe Probleme, es zum Laufen zu bringen - "Bibliothek" ist natürlich undefined und ich muss den "libraryId" Schlüssel weglassen. Wenn ich dies tue, erstellt es nur einen 'Bibliothek'-Datensatz, der die' Bücher' ignoriert. Können Sie eine reproduzierbare Probe bereitstellen? – alecxe

+0

Hallo @alecxe, Vielen Dank für Ihre Antwort. Richtig, Sie brauchen die library.id nicht, weil es noch keine Bibliotheksinstanz gibt. Außerdem sollte die Eigenschaft Bücher statt Bücher sein, da das Modell selbst ebenfalls groß geschrieben wird (Buch statt Buch). Habe es einfach auf meinem lokalen Rechner getestet und es funktioniert. –

+0

Oh wow, ja, es funktioniert. Ich frage mich, warum Sequelize nicht solche Dinge dokumentieren lässt (vielleicht habe ich die Docs übersehen). Danke vielmals. – alecxe

Verwandte Themen