2014-07-03 49 views
14

我试图在SailsJS中建模现有的MSSQL表。毫不奇怪,现有数据库中的表具有与SailsJS框架生成的类似的createdAt和updatedAt列。更改字段名称为CreatedAt/UpdateAt属性

有没有办法将SailsJS框架生成的属性值赋给我定义的属性?例如:

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

回答

21

没有,但你完全可以关闭自动生成的属性和使用自己:

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

Waterline options doc

+0

Scott,如果您使用模式来强制执行行为,例如'created_ts timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP',您是否必须使用'afterUpdate'处理程序将资源加载回数据库并绑定数据回到资源? –

+0

更新查询已经执行后,'afterUpdate'挂钩出现,因此您的代码*不会*更新updateDate。我做这个工作的方式是使用'afterValidate'钩子。它看起来像我最喜欢的钩子放置此代码英寸(这是写入使用Sails 0.10时) –

+0

这应该是'beforeUpdate' - 惊讶之前没有人抓到! – sgress454

15

你可以重新映射方式如下:

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

我认为这应该是公认的答案 – Gab