2015-05-13 17 views
5

Sono assolutamente nuovo a questo tipo di framework. Sono venuto dallo sviluppo di PHP barebone e non riesco a trovare una guida facile da capire su cosa effettivamente facciano le migrazioni.Come funzionano le migrazioni di Laravel?

Sto provando a creare un progetto che ha già un database esistente. Ho usato questo: https://github.com/Xethron/migrations-generator[1] ma apportare modifiche allo schema tramite le migrazioni sembra sputare errori, il che significa che non ho idea di cosa sto facendo.

Ho davvero bisogno di una semplice riduzione di ciò che le migrazioni effettivamente fanno, di come influiscono sul database e di qualsiasi altra cosa pensate possa aiutare un principiante assoluto.

+1

Le migrazioni sono un tipo di controllo di versione per il database. - Hai già usato il controllo della versione? È essenzialmente un modo di passare da una configurazione all'altra o di tornare alla versione precedente di come era uno schema di database. – naththedeveloper

+0

Se aggiungo una nuova colonna in una tabella nella versione 1.1.1, quindi la mia migrazione creerà la nuova colonna (conosciuta come "up" - passando alla versione successiva) e rimuoverà anche la colonna (conosciuta come "down" - spostandosi alla versione precedente) – naththedeveloper

+0

Possibile duplicato? http://stackoverflow.com/q/23010146/472495 – halfer

risposta

9

Le migrazioni sono un tipo di controllo di versione per il database. Consentono a un team di modificare lo schema del database e rimanere aggiornati sullo stato corrente dello schema. Le migrazioni vengono in genere accoppiate allo Schema Builder per gestire facilmente lo schema dell'applicazione.

Con le migrazioni non è necessario creare una tabella in phpMyAdmin, è possibile farlo in Laravel. Ecco un esempio di creare una tabella utente:

class CreateUsersTable extends Migration { 

    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('users', function(Blueprint $table) 
     { 
      $table->increments('id'); // autoincrement id field 
      $table->string('name'); // string field 
      $table->string('lastname'); 
      $table->string('title'); 
      $table->string('email')->unique(); // unique string field 
      $table->string('password', 60);  // string field with max 60 characters 
      $table->boolean('Status')->default(0); // string field with default value 0 
      $table->timestamps(); 

     }); 
    } 


    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::drop('users'); 
    } 

} 

ho questo codice creiamo tabella con campi come "nome", "cognome" ... abbiamo detto nel nostro codice laravel essi sono di tipo stringa quando la migrazione è fatto abbiamo una tabella completa in databese con questi campi.

Eseguire una migrazione per creare tavolo

Per creare una migrazione, è possibile utilizzare il make: comando di migrazione sulla Artisan CLI (interfaccia artigianale riga di comando):

php artisan make:migration create_users_table 

o

php artisan make:migration create_users_table --create=users 

Eseguire una migrazione n alterare tavolo

Quando è necessario fare alcuni cambiamenti nella esempio tabella del database: aggiungere il campo voto di tabella degli utenti che si può fare in questo modo nel codice laravel senza toccare il codice SQL

php artisan make:migration add_votes_to_users_table --table=users 

rollback il ultima operazione di migrazione

Se si commette un errore e si è verificato un errore, è sempre possibile eseguire il rollback per restituire il database nello stato precedente.

php artisan migrate:rollback 

rollback tutte le migrazioni

php artisan migrate:reset 

rollback tutte le migrazioni ed eseguire tutti di nuovo

php artisan migrate:refresh 

php artisan migrate:refresh --seed 

Uno dei miglior vantaggio di migrazioni stanno creando database senza toccare il codice SQL. È possibile creare un database completo con una relazione nel codice PHP, quindi migrarlo in MySQL, PL/SQL, MSSQL o qualsiasi altro database.

Inoltre, raccomando lo Laravel 5 fundamental series gratuito, nell'episodio 7 è possibile ricevere ulteriori informazioni sulle migrazioni.

+0

Buona risposta! Piccolo cavillo però: posso disturbarti a evitare di parlare qui? Ci piacciono le domande per essere il più leggibili possibile e cercare di scoraggiare le persone a trattarle come una chat room o forum. [Questa è una discussione recente] (http://meta.stackoverflow.com/q/293779/472495) sull'argomento. – halfer

+0

Come utilizzare le migrazioni su un database esistente? Ecco dove si presenta il problema principale. – Recur

+1

sul database esistente https://github.com/Xethron/migrations-generator è una delle soluzioni o 1. Creare un database vuoto 2. Creare una migrazione per ogni tabella nell'ordine in cui sono È necessario creare (tenendo conto delle chiavi e così via) 3. Aggiungere una nuova connessione al database per il vecchio database database (se su un altro server) 4. Creare i file seme per estrarre le informazioni dal vecchio database al nuovo database. – Adnan

0

Una semplice spiegazione delle migrazioni:

Si tratta di un sistema di controllo delle versioni per il vostro schema di database.

Immagina di configurare una nuova applicazione. La prima cosa che fai è creare un tavolo (chiamalo mytable) con un paio di colonne. Questa sarà la tua prima migrazione. Esegui la migrazione (php artisan migrate) quando inizi a lavorare sulla tua applicazione e voilà! Hai una nuova tabella nel tuo database.

Qualche tempo dopo, decidi che hai bisogno di una nuova colonna nella tabella. Si crea una migrazione (php artisan make:migration in Laravel 5) e viene creato un nuovo file di migrazione. Si aggiorna il codice in quella migrazione, si esegue nuovamentee si dispone di una nuova colonna nella tabella.

Ok, questa è l'idea alla base delle migrazioni. Ma c'è di più ...

Supponiamo, in seguito, ti rendi conto che hai incasinato quando hai creato quell'ultima migrazione. L'hai già eseguito, quindi il tuo database è cambiato. Come aggiustarlo? Bene, se hai scritto correttamente la migrazione e implementato il metodo down, puoi semplicemente eseguire php artisan migrate:rollback e il rollback della migrazione.

Come fa Laravel a fare questo? Tenendo traccia delle migrazioni in una tabella di database speciale. Il comando php artisan migrate:install imposterà le cose per te in modo che Laravel possa gestire queste migrazioni.

Nel corso del tempo, con l'aumentare della domanda, si aggiungeranno sempre più migrazioni. Laravel ti offre un modo per fare un passo in avanti e tornare indietro durante le migrazioni, se necessario, per garantire che il tuo database sia in qualsiasi stato ti serva per lavorare.

Controllare l'elenco dei comandi artisan con php artisan. Puoi anche chiedere aiuto su un particolare comando con php artisan help <command>.

0

Immagina di lavorare a un progetto con altri sviluppatori. Poiché gli sviluppatori aggiungono sempre più funzionalità, sono anche necessarie per aggiungere sempre più tabelle, colonne, rimuovere colonne, modificare i tipi di dati delle colonne, ecc ...

Questo può molto rapidamente e facilmente fuori controllo. Se ti sei perso qualche SQL da uno sviluppatore, l'SQL di un altro sviluppatore potrebbe non funzionare correttamente. Diventa anche potenzialmente un enorme perdita di tempo cercando di ordinare attraverso un sacco di file sql cercando di capire quali hai perso. È solo questione di tempo prima che tutti gli addetti ai lavori del team di sviluppo lavorino con database diversi o se Dio non voglia, qualcuno interrompe il database di produzione. Con le migrazioni, devi solo eseguire php artisan migrate nella riga di comando e tutte le modifiche al database saranno prese in considerazione per te.

Questo è fondamentalmente il motivo per cui le migrazioni sono utili Non ho intenzione di entrare nelle basi di come funzionano perché Kryten ha già una bella recensione qui.