Kiedy używasz schema-tool
, nie historia modyfikacji bazy danych są przechowywane, a także w produkcji/środowiska pomostowego jest to duży minus.
Załóżmy, że masz skomplikowaną strukturę bazy danych w projekcie na żywo. A w następnym zestawie zmian musisz jakoś zmienić bazę danych. Na przykład telefony kontaktowe użytkowników muszą być przechowywane w innym formacie niż kolumny VARCHAR
, ale trzy SMALLINT
dla kodu kraju, numeru kierunkowego i numeru telefonu.
Cóż, nie jest tak trudno znaleźć zapytanie, które pobrałoby bieżące dane, oddzieli je na trzy wartości i wstawi je z powrotem. Wtedy zaczynają się migracje: możesz tworzyć nowe pola, a następnie transformować i ostatecznie usunąć pole, w którym przechowywano dane.
I jeszcze więcej! Można nawet opisać proces cofania (migracja down
), kiedy trzeba cofnąć zmiany wprowadzone w migracji. Załóżmy, że ktoś gdzieś polegał w dużym stopniu na formacie pola VARCHAR
, a teraz, gdy zmieniłeś strukturę, jego fragment kodu nie działa zgodnie z oczekiwaniami. Tak więc uruchamiasz migration:down
, a wszystko zostanie przywrócone. W tym konkretnym przypadku wystarczy, że przywrócisz starą kolumnę VARCHAR
i połączysz wartości z powrotem, a następnie usuniesz te pola.
Narzędzie do analizy Doctrine w zasadzie wykonuje większość pracy za Ciebie. Kiedy zmieniasz swój schemat, generuje on wszystkie niezbędne up
i down
, więc jedyne, co musisz zrobić, to obsłużyć dane, które mogą zostać uszkodzone podczas migracji.
Migracje to także coś, co daje innym programistom w zespole wiedzę na temat tego, kiedy należy zaktualizować ich schematy. Tylko z schema-tool
, twoi koledzy z drużyny będą musieli uruchomić doctrine:schema:update
za każdym razem, gdy będą ciągnąć, ponieważ nie będą wiedzieli, czy schemat naprawdę się zmienił.
Podczas korzystania z migracji zawsze widać, że w folderze migracji są pewne aktualizacje, co oznacza, że trzeba zaktualizować swój schemat.
Bardzo dobra odpowiedź, nie mogę tego zrobić jaśniej :) – Wcool
@Wcool, thanks :) – kix
Bardzo pomocna odpowiedź. Wielkie dzięki. –