Il seeding del database è il processo, generalmente automatico, con il quale inseriamo una serie di dati in fase di setup dell’applicazione.

Questi dati possono essere inseriti per scopi diversi:

  • – per effettuare test col database.
  • – per inserire pagine di esempio per gli utenti
  • – per fornire dati di default necessari al funzionametto del sito, come ad esempio, account di amministrazione, categorie predefinite ecc…

Laravel permette di effettuare il seed in modo semplice attraverso delle classi specifiche, salvate all’interno della cartella database/seeds.

Di default troviamo già la classe DatabseSeeder. Vediamo il suo contenuto.

database-seeder-laravel

class DatabaseSeeder extends Seeder {

	/**
	 * Run the database seeds.
	 *
	 * @return void
	 */
	public function run()
	{
		Eloquent::unguard();

		// $this->call('UserTableSeeder');
	}

}

DatabaseSeeder è costituita da un unico metodo run(), in cui metteremo tutto il codice che servirà a popolare il database.

All’interno di run() troviamo due righe

Eloquent::unguard();

serve per bypassare un filtro che impedisce l’inserimento massivo di dati.

// $this->call('UserTableSeeder');

(nota che è commentata) contiene il metodo call() che serve a richiamare un’altra classe. Questa classe secondaria, come la principale, deve contenere un metodo run() con il codice specifico per una particolare tabella.

In questo modo è possibile tenere saparato il codice relativo a ciascuna tabella del database.

Inserimento di utenti con il metodo del seeding

Nel prossimo esempio creiamo un seeder  per inserire alcuni utenti nella tabella user che abbiamo creato nella guida sulle migration.

Per prima cosa, dal file seeds/DatabaseSeeder.php decommentiamo la chiamata a UserTableSeeder, poi creiamo un nuovo file chiamato UserTableSeeder.php
nuova-classe-seed-utenti-laravel

<?php
class UserTableSeeder extends Seeder {

    public function run()
    {
        //eliminiamo eventuali utenti già presenti
        DB::table('users')->delete();

        User::create( array(
        	'username' => 'admin',
        	'password' => Hash::make( 'admin' ),
        	'email' => 'admin@bar.com'

        	));

        User::create( array(
        	'username' => 'editor',
        	'password' => Hash::make( 'editor' ),
        	'email' => 'editor@bar.com'

        	));
    }

}

Come lanciare il seeding

Per innescare il processo di seeding dobbiamo aprire il terminale e digitare il comando:

php artisan db:seed

Possiamo aprire la tabella users per verificare l’effettivo inserimento degli utenti.

seed-user-laravel

Abbiamo visto che la classe UserTableSeeder è stata lanciata in modo indiretto, attraverso i metodo call() di DatabaseSeeder. Esiste un modo diverso per riferirsi a una classe direttamente da riga di comando

php artisan db:seed --class=UserTableSeeder

La guida sarà terminata a breve. Rimangono da vedere alcuni argomenti:

Eseguire le query con Eloquent
Le collections
Le relazioni tra le tabelle del database

Se qualcosa non è chiara o vuoi segnalare un errore puoi lasciare un commento o utilizzare il modulo dei contatti.


  inStileWeb.com
blog comments powered by Disqus