2014-07-03 11 views
14

Próbuję utworzyć model istniejącej tabeli MSSQL w SailsJS. Nie zaskakuje to, że tabele w istniejącej bazie danych mają utworzoną kolumnę AAt i updatedAt, podobną do tej, która jest generowana przez framework SailsJS.Zmiana nazwy pola dla atrybutu CreatedAt/UpdateAt

Czy istnieje sposób przypisania wartości właściwości wygenerowanej przez szkielet SailsJS do zdefiniowanego przeze mnie atrybutu? Na przykład:

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

Odpowiedz

21

Nie, ale można wyłączyć właściwość automatycznie wygenerowane w całości i wykorzystywać własne:

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(); 
} 

Zobacz Waterline options doc.

+0

Scott, jeśli używasz schematu wymusić zachowanie, na przykład 'created_ts timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP', trzeba by użyć' obsługi afterUpdate' załadować zasobu z powrotem z DB i wiążą dane z powrotem do zasobu? –

+0

Po aktualizacji kwerendy "afterUpdate" pojawia się, więc twój kod * nie * aktualizuje date aktualizacji. Sposób, w jaki wykonałem tę pracę, to użycie haka "afterValidate". Wygląda mi to jak najbardziej odpowiedni hak do umieszczenia tego kodu. (Jest to napisane podczas używania Żagli 0.10) –

+0

To powinno być 'beforeUpdate' - zaskoczyło, że nikt wcześniej tego nie zauważył! – sgress454

15

Można przemapować następujący sposób:

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

Myślę, że to powinna być zaakceptowana odpowiedź – Gab