2013-10-07 6 views
8

Soweit ich das beurteilen kann, mit Sequelizejs, es scheint nicht ein Weg, um Objekt-Zuordnungen zu speichern, wenn das Objekt selbst gespeichert wird.speichert Objekt mit den Verbänden in Sequelizejs

Zum Beispiel, ich habe einen Kontakt, 1 oder mehr phonenumber hat. Zur Zeit habe ich so etwas wie dies für den Verein:

global.db.Contact.hasMany(global.db.PhoneNumber, {as: 'phoneNumbers'}); 

einen Rest Endpunkt verwenden würde Ich mag ein neues Kontaktobjekt schreiben (mit allen zur Verfügung gestellt Telefonnummern) und in die Datenbank speichern. Meine Anfrage Objekt sieht wie folgt aus:

{ 
    firstName: "john", 
    lastName: "Doe", 
    phoneNumbers: [ 
     { number: "555-555-5555", type: "home" } 
    ] 
} 

Im Moment gehe ich dieses Ziel zu bauen:

var contact = Contact.build(req.body); 

Und dann rufen Sie sparen (ich weiß, dass ich statt Build erstellen verwenden könnte/speichern, aber wir haben benutzerdefinierte Logik in der speichern die geänderten Daten zu verfolgen und die Benutzer haben die Modifikation)

contact.save(); 

Dies führt den folgenden Fehler, die Art Sinn macht.

column "phoneNumbers" of relation "Contacts" does not exist 

Der SQL-Aufruf versucht, den Wert einer Spalte „phonenumbers“ zu setzen, die nicht existiert. Ich möchte natürlich nicht, es zu tun ... Ich kann es wirklich Masse jedes phonenumber in dem Feld mit der ID des Kontakts erstellen möchte ich die Schaffung bin. Das einzige Beispiel, das ich gefunden habe, war das: https://gist.github.com/sdepold/3040391 und ich möchte das nicht wirklich tun ... Da ich von einem Ruheendpunkt komme, würde ich gerne einen Weg haben, diese Operation generisch zu machen (ich werde es tun) habe viele Modelle mit Assoziationen). Ich werde auch in der Lage sein muß, diese Vorgänge in der Masse zu tun (für Kontakte aus anderen Quellen importieren), so würde ich es vorziehen, dass es die minimale Menge an SQL-Anrufen sein. Hat jemand einen guten Weg gefunden, dies zu tun?

+0

ich habe genau die gleiche Frage. Haben Sie dafür irgendeine Antwort gefunden? Ich bin immer noch auf sequelize 1.7. – optimusPrime

+0

Ich habe nie eine elegante Lösung gefunden. Ich bin seitdem auf andere Projekte gezogen, die Sequelize nicht verwenden. – Nova706

Antwort

1

Ich benutze diesen Code

var createUser = function(req, reply) { 
    db.User.create(req.payload).success(function(user) { 
     saveGroups(req, reply, user); 
    }).error(function(err) { 
     console.error('Error occured', err); 
     reply('Error'); 
    }); 
}; 

var saveGroups = function(req, reply, user) { 
    db.UserGroup.destroy("user_id=" + user.id).success(function() { 
     var groups = req.payload.userGroups; 
     if (groups && groups.length > 0) { 
      for (var i = 0; i < groups.length; i++) { 
       groups[i].user_id = user.id; 
      } 
      db.UserGroup.bulkCreate(groups).success(function() { 
       reply(user); 
      }).error(function(err) { 
       console.error('Error occured', err); 
       reply('Error'); 
      }); 
     } else { 
      reply(user); 
     } 
    }).error(function(err) { 
     console.error('Error occured', err); 
     reply('Error'); 
    }); 
}; 
  • Benutzer ein Modell, das hasMany Usergroup
  • req.payload JSON kommt
  • die zerstören (...) gibt es zunächst die Verbände zu leeren (im Fall tun wir ein Update)
Verwandte Themen