Występuje pułapka na etapie php app/console doctrine:migrations:diff
opisanym powyżej podczas korzystania z migracji doktryny.
Dokonano zmian w encji, wszystko wydaje się prawidłowe, ale polecenie dotyczące tworzenia migracji php app/console doctrine:migrations:diff
mówi "Nie wykryto żadnych zmian w danych mapowania."
Nie można znaleźć miejsca, w którym znajduje się stara struktura bazy danych, szukaj w plikach nic nie znaleziono.
Dla mnie kluczem było wyczyszczenie pamięci podręcznej Redis.
php app/console redis:flushdb
Zdarza powodu config.yml
snc_redis:
clients:
default:
type: predis
alias: default
dsn: redis://localhost
doctrine:
query_cache:
client: default
entity_manager: default
namespace: "%kernel.root_dir%"
metadata_cache:
client: default
entity_manager: default
document_manager: default
namespace: "%kernel.root_dir%"
result_cache:
client: default
namespace: "%kernel.root_dir%"
entity_manager: [default, read] # you may specify multiple entity_managers
Po tym, migracje: Diff ponownego odczytania wszystkich podmiotów (zamiast podejmowania metadane nieaktualne te z pamięci podręcznej) i stworzył odpowiednią migrację.
Tak, cały łańcuch kroków dla podmiotów modyfikujących jest:
- Modyfikuj swoją klasę encji (edycja pliku Entity)
- Wyczyść Redis podręcznej metadanych (
php app/console redis:flushdb
)
- Create (i może być edytowana) migracja (
php app\console doctrine:migrations:diff
)
- Wykonanie migracji (
php app\console doctrine:migrations:migrate
)
Oczywiście pamięć podręczna metadanych twojej doktryny może nie być Redisem, ale czymś innym, np. Plikami w app/cache lub czymkolwiek innym. Nie zapomnij pomyśleć o czyszczeniu pamięci podręcznej.
Może pomóc komuś.
Zrób to z kodu. Narzędzia generatora ORM nie powinny być w ten sposób nadużywane. – Ocramius