2015-07-29 17 views
6

Chcę dodać kolumnę za pomocą migracji po pewnej kolumnie również ją indeksować (Normalny indeks mysql nie jest unikalnym indeksem). Jest to możliwe poprzez sequelize.js poprzez migracje. Jeśli tak, jak i jeśli nie ma żadnych alternatyw dla tego poprzez migracje.Migracje Dodaj kolumnę po określonej kolumnie i kolumnie indeksu

Czy możemy wykonać niestandardową kwerendę w kolejnych migracji.

Poniżej znajduje się mój istniejący plik migracji.

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

Odpowiedz

1

O ile mi wiadomo, nie ma sposobu, aby to zrobić za pomocą funkcji addColumn.

Ale można to zrobić za pośrednictwem surowego kwerendy SQL:

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

można uruchomić niestandardowego SQL kwerendy w migracjach tak:

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

Skoro już używasz niestandardowego SQL można dodać nowa kolumna za pomocą surowego kodu SQL i wstaw ją po wybranej kolumnie:

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

Można przekazać after lub before w opcjach dodawania kolumny po określonej kolumnie.

'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

Całkowicie działa, dziękuję. –

+2

To powinno być zaakceptowane jako poprawna odpowiedź. –

+1

W jakiej wersji Sequelize to działało? Jestem w CLI w wersji 3.9.1 i wygląda na to, że nie działa. –

Powiązane problemy