2015-11-22 14 views
5

Ho bisogno di ottenere alcuni dati da Sequelize Model precedentemente definito.Esiste un modo per ottenere associazioni di attributi // mediante Sequelize Model precedentemente definito?

quello che mi serve:

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

Per qualche motivo è piuttosto difficile per ispezionare modelli Sequelize in consolle:

> 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' }, 
... 

Come si vede, non c'è informazioni reali sui tipi di campi. Lo stesso succede con le associazioni.

Quindi, esiste un metodo "ufficiale" affidabile per estrarre questi dati dalla classe Model senza scavare e rovesciare l'oggetto?

risposta

13

Prova Payment.rawAttributes, che è un oggetto con nome proprietà come chiave e un oggetto con dettagli proprietà. property.type.key è una stringa con il tipo.

Payment.associations è un oggetto di associazioni - la chiave è il nome, e ogni associazione avrà una proprietà associationType - si può anche fare association instanceof sequelize.Association.BelongsTo ecc

+0

GRAZIE. Dopo aver accuratamente cercato Stack Overflow, ho iniziato a trovare il codice Sequelize e ho avuto accesso agli attributi del mio modello. Non riuscivo a capire come leggere il DataType quando appariva come 'ABSTRACT {length: 255}'. Entrambi i lavori di cui sopra. – NobleUplift

+1

Per ottenere il tipo come stringa utilizzata nel database, è possibile eseguire 'ModelName.rawAttributes.propertyName.type.toSql()' – Eric

+0

Grazie! L'ho appena usato oggi. C'è documentazione per questo misterioso oggetto di "tipo" e tutte le proprietà/metodi che contiene? – NobleUplift