2014-07-03 13 views
14

Sto tentando di modellare una tabella MSSQL esistente in SailsJS. Non sorprende che le tabelle nel database esistente abbiano una colonna creata e aggiornata in t simile a quella generata dal framework SailsJS.Modificare il nome del campo per gli attributi CreatedAt/UpdateAt

C'è un modo per assegnare il valore della proprietà generata dal framework SailsJS a un attributo che ho definito? Per esempio:

attributes: { 
    ... 
    creationDate:{ 
     columnName:'cre_dt', 
     type:'datetime', 
     defaultsTo: this.createdAt 
    } 
    ... 
} 

risposta

21

No, ma è possibile disattivare la proprietà auto-generata completamente e utilizzare il proprio:

autoCreatedAt: false, 
autoUpdatedAt: false, 
attributes: { 
    creationDate: { 
     columnName: 'cre_dt', 
     type: 'datetime', 
     defaultsTo: function() {return new Date();} 
    }, 
    updateDate: { 
     columnName: 'upd_dt', 
     type: 'datetime', 
     defaultsTo: function() {return new Date();} 
    } 
}, 
//Resonsible for actually updating the 'updateDate' property. 
beforeValidate:function(values,next) { 
    values.updateDate= new Date(); 
    next(); 
} 

Vedere le Waterline options doc.

+0

Scott, se si utilizza lo schema di far rispettare il comportamento, ad esempio 'created_ts timestamp NOT NULL CURRENT_TIMESTAMP' DI DEFAULT, vorresti essere necessario utilizzare un gestore di' afterUpdate' per caricare la risorsa di nuovo fuori del DB e si legano i dati tornano alla risorsa? –

+0

L'hook 'afterUpdate' sembra verificarsi dopo che la query di aggiornamento è già stata eseguita, quindi il codice * non * aggiorna l'updateDate. Il modo in cui ho fatto questo lavoro è quello di utilizzare l'hook 'afterValidate'. Mi sembra il gancio più adatto per inserire questo codice. (Questo è scritto durante l'uso di Sails 0.10) –

+0

Questo dovrebbe essere stato 'beforeUpdate' - sorpreso nessuno lo ha mai visto prima! – sgress454

15

Si potrebbe rimappare seguente modo:

attributes: { 
    createdAt: { 
     type: 'datetime', 
     columnName: 'cre_dt' 
    }, 
    updatedAt: { 
     type: 'datetime', 
     columnName: 'upd_dt' 
    }, 
    // your other columns 
    } 
+5

Penso che questa dovrebbe essere la risposta accettata – Gab