2015-07-29 17 views
6

Desidero aggiungere una colonna tramite le migrazioni dopo che una determinata colonna lo indicizza (indice mysql normale non indice univoco). È possibile tramite sequelize.js tramite migrazioni. Se sì, come e se non ci sono alternative per questo tramite le migrazioni.Migrazioni Aggiungi colonna dopo colonna specificata e colonna indice

Possiamo eseguire query personalizzate in sequenze di migrazioni.

Di seguito è riportato il file di migrazione esistente.

'use strict'; 

module.exports = { 
    up: function (queryInterface, Sequelize) { 
    return queryInterface.addColumn('UserDetails', 'user_id', { 
     type: Sequelize.INTEGER, 
    }); 
    }, 

    down: function (queryInterface, Sequelize) { 
    return queryInterface.removeColumn('UserDetails', 'user_id'); 
    } 
}; 

risposta

1

Per quanto ne so non c'è modo di farlo tramite la funzione addColumn.

Ma lo si può fare tramite query SQL grezzo:

ALTER TABLE UserDetails CHANGE COLUMN user_id user_id VARCHAR(50) AFTER some_column; 

È possibile eseguire query SQL personalizzata in migrazioni come questo:

module.exports = { 
    up: function(queryInterface, Sequelize) { 
    return queryInterface.sequelize.query("ALTER TABLE UserDetails CHANGE COLUMN user_id user_id VARCHAR(50) AFTER some_column;") 
    }, 
    down: function(queryInterface, Sequelize) { 
    return true; 
    } 
}; 

Dal momento che si sta già utilizzando SQL personalizzata che si potrebbe aggiungere il nuova colonna tramite SQL non elaborato e inserirla dopo la colonna selezionata:

ALTER TABLE UserDetails ADD COLUMN user_id VARCHAR(50) AFTER some_column; 
13

È possibile passare after o before nelle opzioni per aggiungere una colonna dopo una colonna specificata.

'use strict'; 

module.exports = { 
up: function (queryInterface, Sequelize) { 
return queryInterface.addColumn('UserDetails', 'user_id', { 
    type: Sequelize.INTEGER, 
    after: "some_column" 
}); 
}, 

down: function (queryInterface, Sequelize) { 
return queryInterface.removeColumn('UserDetails', 'user_id'); 
} 
}; 
+0

Completamente funziona, grazie. –

+2

Questo dovrebbe essere accettato come risposta corretta. –

+1

In che versione di Sequelize stava lavorando? Sono su CLI versione 3.9.1 e non sembra funzionare. –