2013-07-31 8 views
8

Ho un determinato database con nomi di colonne lunghi e ingombranti. Non esiste un modo per mappare il nome del tableau su nomi di proprietà più brevi e più descrittivi nel modello? qualcosa comeNon esiste alcuna opzione per mappare il nome della colonna nel modello sequenziale

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

risposta

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

Specificare un 'campo' attributo ... Come quella^

+1

Questa è la risposta ufficiale. Il documento ha un esempio: http://docs.sequelizejs.com/en/latest/docs/models-definition/#definition –

+0

Questa dovrebbe essere la risposta accettata. –

1

Finora la soluzione migliore I found per farlo è quello di utilizzare getter e setter.

Essi tuttavia non influiscono sui risultati in object.values ​​o object.toJSON(). Avrai bisogno dei tuoi metodi di serializzazione se vuoi usarli.

2

È possibile specificare un nome di tabella fornendo il nome come primo parametro alla chiamata define(). Per esempio:

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' 
} 
); 
Problemi correlati