2013-07-31 26 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' 
} 
); 
相關問題