2015-11-22 9 views
5

Ich brauche einige Daten nach dem zuvor definierten Sequelize-Modell.Gibt es eine Möglichkeit, Attribute // Assoziationen nach dem zuvor definierten Sequelize Model zu erhalten?

Was ich brauche:

* attributes list 
    * attribute name 
    * attribute type (INTEGER, STRING,...) 
    * was it generated by association method? 
* list of associations 
    * association type (belongsTo, hasMany, ...) 

Aus irgendeinem Grund ist es ziemlich hart Sequelize Modelle in der Konsole zu überprüfen:

> db.sequelize.models.Payment 
Payment // <- it's valid Sequelize Model {Object}, however its not inspectable 

> db.sequelize.models.Payment.attributes 
... 
type: 
{ type: { values: [Object] }, 
    values: [ 'cash', 'account', 'transfer' ], 
    Model: Payment, 
    fieldName: 'type', 
    _modelAttribute: true, 
    field: 'type' }, 
sum: 
{ type: 
    { options: [Object], 
     _length: undefined, 
     _zerofill: undefined, 
     _decimals: undefined, 
     _precision: undefined, 
     _scale: undefined, 
     _unsigned: undefined }, 
    Model: Payment, 
    fieldName: 'sum', 
    _modelAttribute: true, 
    field: 'sum' }, 
... 

Wie Sie sehen, gibt es keine aktuellen Informationen über Felder Typen. Das gleiche passiert mit Assoziationen.

Gibt es also eine zuverlässige "offizielle" Möglichkeit, diese Daten aus der Modellklasse zu extrahieren, ohne das Objekt zu graben und umzukehren?

Antwort

13

Versuchen Sie Payment.rawAttributes, die ein Objekt mit Eigenschaftsname als Schlüssel ist, und ein Objekt mit Eigenschaftendetails. property.type.key ist eine Zeichenfolge mit dem Typ.

Payment.associations ist eine Aufgabe der Verbände - der Schlüssel ist der Name, und jeder Verein wird eine associationType Eigenschaft haben - Sie auch association instanceof sequelize.Association.BelongsTo tun können, usw.

+0

DANKE. Nach gründlicher Suche in Stack Overflow habe ich den Sequelize-Code durchforstet und auf die Attribute meines Modells zugegriffen. Konnte nicht herausfinden, wie man den DataType liest, wenn er als 'ABSTRACT {length: 255}' angezeigt wird. Beide der oben genannten Arbeiten. – NobleUplift

+1

Um den Typ als String für Ihre Datenbank zu erhalten, können Sie 'ModelName.rawAttributes.propertyName.type.toSql()' – Eric

+0

Danke! Habe es gerade heute benutzt. Gibt es Dokumentation für dieses mysteriöse "type" -Objekt und alle darin enthaltenen Eigenschaften/Methoden? – NobleUplift

Verwandte Themen