2016-05-04 6 views
1

Jeder Beispielcode von eins zu vielen in der Segel/Wasserleitungsdokumentation nimmt an, dass der Primärschlüssel die Verbindung zwischen zwei Modellen ist (denke ich).Beliebige Beziehung in Segeln js ohne Primärschlüssel

http://sailsjs.org/documentation/concepts/models-and-orm/associations/one-to-many

Allerdings habe ich Modelle, die eine Überweisung Spalte haben, die einige andere Werte ähnlich wie

User 
{ 
    id (primary): <int> 
    email: <string> 
} 

recordings 
{ 
    id (primary): <int> 
    email: <that email from user> 
} 

atm im

userModel.js 
{ 
    attributes: { 
     email: { 
     type: 'string', 
      size: 255, 
      unique: true 
     }, 
     }, 
     queries: { 
     columnName: 'email', 
     model: 'recordings' 
     } 
     ..... 
    } 
} 

recordingsModel.js 
{ 
    attributes: { 
     email: { 
     type: 'string', 
      size: 255, 
     }, 
     }, 
     queries: { 
     model: 'user' 
     } 
     ..... 
    } 
} 

und im Controller versuchen, verweist

sails.models.user 
    .find() 
    .populate('queries') 
    .exec(function (err, results) { 

}); 

aber ich habe den Fehler : ER_BAD_FIELD_ERROR: Unknown column ‚__queries.queries‘ in ‚field list‘

Hat eine bis viele Beziehungen in Wasserlinie ein gutes Tutorial jemand hat, weil die Dokumentation auf dort Website ist ziemlich schlecht, so Ich fühle, dass ich gerade nicht verstehe, wie man die Modelle entwirft.

+0

Im RecordingsModel haben Sie das Attribut '' 'queries''' und diese Spalte existiert nicht. Versuchen Sie es zu entfernen. – Bonanza

Antwort

1

Von dem, was ich sammeln können, was Sie wollen in der Lage sein, um Ihre userModel und recordingsModel Modelle so dass durch eine Aufnahme eines bestimmten Wert für email geben, wird es automatisch mit allen Benutzern, die diese E-Mail teilen zugeordnet werden . Dies ist nichts, was die Waterline (the Sails ORM) unterstützt.

Stattdessen Ihre beste Möglichkeit ist, um die Modelle zu gründen wie in der Dokumentation angegeben:

// userModel.js 
{ 
    attributes: { 
     email: { 
     type: 'string', 
      size: 255, 
      unique: true 
     }, 
     }, 
     recordings: { 
     collection: 'recordingsModel', 
     via: 'user' 
     } 
     ..... 
    } 
} 

// recordingsModel.js 
{ 
    attributes: { 
     email: { 
     type: 'string', 
      size: 255, 
     }, 
     }, 
     user: { 
     model: 'userModel' 
     } 
    } 
} 

Meine Vermutung ist, dass Sie versuchen, eine Benutzer-ID suchen, um zu vermeiden, das eine assoziieren neue Aufnahme damit. Sie können dies tun, wenn Sie email den Primärschlüssel des userModel machen; dann, wenn Sie eine neue Aufnahme erstellen, können Sie seine user auf eine E-Mail-Adresse und voila: die beiden sind verknüpft.

+0

Unglücklicherweise segelt ich über eine bereits bestehende Datenbank hinaus. Ich werde mich nicht ändern, da andere Systeme darauf angewiesen sind. Leider scheint Segel etwas eigenwilliger zu sein, als ich gehofft hatte. Könnte aus diesem Grund Wasserlinie für eine traditionelle mysql Verbindung fallen lassen. – Neablis

+0

Sie können immer ['.query'] (http://sailsjs.org/documentation/reference/waterline-orm/models/query) verwenden, um auch eine benutzerdefinierte SQL-Abfrage von Waterline zu erstellen. – sgress454

+1

Ja, aber was ist dann der Sinn der Wasserlinie? Ich mache das leider immer öfter für jeden Endpunkt. – Neablis

Verwandte Themen