2011-01-25 5 views
5

Ehi. Ho difficoltà a migrare le modifiche Ho fatto il mio file config/doctrine/schema.yml.Miglior utilizzo dei modelli e migrazione in symfony

Ho aggiunto la colonna age alla tabella user. Poi ho fatto un php symfony doctrine:generate-migrations-diff seguito da php symfony doctrine:migrate.

Guardando nel mio database, la colonna age è stata aggiunta, senza cancellare alcun dato.

Tuttavia, il mio /lib/model/doctrine/base/BaseUser.class.php non è stato modificato, non esiste il campo age o age. Così ho anche fatto il comando php symfony doctrine:build-model. Infine, il modello viene aggiornato/migrato anche.

Quindi mi chiedo, è questo l'unico modo? Sembra un sacco di lavoro, e ho paura di perdere qualcosa ogni volta che lo fa.

Posso andare direttamente in phpmyadmin, aggiungere le modifiche nel database e fare semplicemente un php symfony doctrine:build-schema, e così si salta la parte di migrazione (due comandi).

Anche quando si tratta di utilizzare i modelli, ho ragione che /lib/model/doctrine/User.class.php è dove posso creare funzioni e tali per la mia "classe di dati" utente? Come, facendo una funzione isFemale. Altrimenti, dove sarebbe questo tipo di funzione?

Questa potrebbe essere una domanda non valida, ma perché il livello del modello si trova all'interno del percorso/lib/doctrine? Per quanto ho appreso, tieni i moduli all'interno delle app, dove crei la vista e il controller. Perché il modello dovrebbe essere all'esterno. In questo modo posso creare modelli senza controller e vista allegati?

Grazie.

risposta

8

Perché il modello di essere al di fuori

Poiché i modelli possono essere utilizzati ovunque nel progetto, a esempio, in diverse applicazioni e moduli.

Potrei andare a destra in phpMyAdmin, aggiungere le modifiche nel database lì e basta fare uno symfony doctrine php: build-schema, e così saltare la parte di migrazione (due comandi).

Ovviamente è possibile, ma le migrazioni rappresentano un buon approccio per tenere traccia dello schema quando si esegue la produzione o si lavora in team.

Ecco come uso le migrazioni Doctrine (semplici casi d'uso):

  1. aggiungere una colonna age al mio modello di User in schema.yml
  2. ./symfony doctrine:generate-migrations-diff. La classe di migrazione (-es) è stata generata.
  3. ./symfony doctrine:migrate. Colonna age aggiunta correttamente alla tabella.
  4. ./symfony doctrine:build --all-classes. Moduli di costruzione/filtri/modelli

Questo è tutto.L'idea principale è che doctrine:generate-migrations-diff classe:

  1. raccoglie informazioni su tutte le strutture tuoi modelli (php-rappresentazione di schema.yml)
  2. confronta l'informazioni schema.yml e da (1)
  3. Genera classi di migrazione basati differenza

anche quando la viene a uso di modelli, io sono giusto che /lib/model/doctrine/User.class.php è dove posso fare le funzioni e come per il mio utente "classe di dati" ? Come, fare una funzione è di moda. Altrimenti, dove sarebbe questo tipo di funzione?

Sì, è possibile aggiungere tale metodo al modello User perché riguarda gli utenti.

+1

+1 per una risposta ben scritta e spiegata –

+0

Ora ho appena ricevuto un errore, non è stato possibile generare classi di migrazione dalla differenza. Nessun altro errore :( – Johannes

+1

Johannes, significa che lo schema e i modelli sono sincronizzati Ricordarsi di non costruire modelli finché non si creano migrazioni. – Darmen