2013-07-31 25 views
8

我有一个给定的数据库,它有长而繁琐的列名。没有办法将表名映射到模型中的更简短和更具描述性的propertyNames? 像是否没有选项来映射后续模型中的列名称

var Employee = sql.define('Employee', { 
    id : {type : Sequelize.INTEGER , primaryKey: true, map : "veryLongNameForJustTheId"} 
},{ 
    tableName: 'cumbersomeTableName', 
    timestamps: false 
});; 

回答

12
id : { 
    field: 'some_long_name_that_is_terrible_thanks_dba_guy', 
    type : Sequelize.INTEGER , 
    primaryKey: true 
} 

指定一个 '场' 属性...喜欢那个^

+1

这是官方的答案。该文档有一个示例: http://docs.sequelizejs.com/en/latest/docs/models-definition/#definition –

+0

这应该是公认的答案。 –

1

迄今为止最好的解决办法I found做,这是使用getter和setter。

然而,它们将不会影响object.values或object.toJSON()中的结果。如果你想使用这些,你将需要你自己的序列化方法。

2

您可以通过将该名称作为define()调用的第一个参数来指定表名。例如:

var User = sequelize.define(
'a_long_cumbersone_users_table_name', 
{ 
    id: { 
     type: Sequelize.INTEGER, 
     primaryKey: true 
    }, 
    name: { 
     type: Sequelize.STRING 
    }, 
    email: { 
     type: Sequelize.STRING 
    }, 
    password: { 
     type: Sequelize.STRING 
    }, 
    rememberToken: { 
     type: Sequelize.STRING, 
     field: 'remember_token' 
    } 
}, 
{ 
    underscored: true, 
    timestamps: true, 
    createdAt: 'created_at', 
    updatedAt: 'updated_at' 
} 
); 
相关问题