IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Configuració d'accés a base de dades (capa de persistència)

Anem a veure com es configura l'accés a la base de dades i la creació de la base de dades. El primer que podeu fer es modificar el fitxer:

config/database.php

L'opció

'default' => 'mysql',

Indica el tipus de base de dades. Per defecte posa mysql. Més abaix podeu veure les dades concretes:

 'mysql' => [
 			'driver'    => 'mysql',
			'host'      => env('DB_HOST', 'localhost'),
			'database'  => env('DB_DATABASE', 'forge'),
			'username'  => env('DB_USERNAME', 'forge'),
			'password'  => env('DB_PASSWORD', ''),
			'charset'   => 'utf8',
			'collation' => 'utf8_unicode_ci',
			'prefix'    => '',
			'strict'    => false,
		],

Com podeu veure la base de dades per defecte és forge i l'usuari és forge amb la paraula de pas buida i es troba a localhost però això només s'aplica si les variables d'entorn:

DB_HOST
DB_DATABASE
DB_USERNAME
DB_PASSWORD

...no estan definides. Podeu observar doncs que el fitxer de configuració de la base de dades en cas que utilitzeu MySQL no cal tocar res està tot preparat per l'inici d'una aplicació típica.

Vegeu el següent apartat per a la creació de la base de dades inicial.

Migracions

Vegeu l'article migrations per a una introducció base sobre que són les migracions i concretament la comanda:

php artisan migrate

Que és la eina que utilitza Laravel per executar les migracions.

Primeres passes en la creació d'una base de dades Laravel utilitzant migracions

Ara falta crear la base de dades. Aquí la recomanació és evitar el procediment habitual de modificar la base de dades directament a un gestor com phpmyadmin o amb la comanda mysql. En canvi utilitzarem database migrations per definir mitjançant codi les modificacions que fem a la base de dades. A més Laravel incorpora per defecte unes migracions d'inici per al tema d'autenticació

NOTA: No és obligatori utilitzar les migracions que proposa Laravel de fet podeu executar php artisan fresh per a una instal·lació sense Scaffolding de Laravel

Per executar les migracions:

IMPORTANT: Aquesta comanda només us funcionarà si teniu la màquina homestead en funcionament i correctament configurada. Sinó heu d'indicar les credencials d'una base de dades local al fitxer env. Vegeu més endavant...

$ php artisan migrate
Migration table created successfully.
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table

Com podeu veure crea dos taules a la base de dades seguint les instruccions dels fitxers:

database/migrations/2014_10_12_000000_create_users_table.php
database/migrations/2014_10_12_100000_create_password_resets_table.php

Però on ha creat la base de dades? Doncs a la màquina virtual homestead si està en execució es clar. Les dades per defecte són:

Nom base de dades: homestead
Paraula de pas: secret

NOTA: La base de dades homestead està creada ja per a MySQL i PostgreSQL a la màquina virtual homestead

Homestead no porsta instal·lat PHPMyadmin però el podeu instal·lar sense problemes o utilitzar eines com Navicat o Sequel Pro connectant als ports locals:

127.0.0.1:33060 (MySQL)
127.0.0.1:54320 (Postgres)

Consulteu:

http://laravel.com/docs/4.2/homestead

Si voleu configurar les variables d'entorn que contindran les dades d'accés a la base de dades. Aneu a la home del projecte i podeu crear sinó existeix el fitxer

env

NOTA: Aquest fitxers és ignorat per git a .gitignore per mantenir les paraules de pas secretes en cas que utilitzeu git

Si observeu tenir un exemple de fitxer:

env.sample

Un cop creat el fitxer podeu esborrar el sample i per precaució (seguretat) podeu executar:

$ php artisan clear-compiled

Es poden utilitzar altres gestors de bases de dades com SQLlite. Podeu trobar un exemple complet a:

https://laracasts.com/series/build-your-first-app-in-laravel/episodes/4

Crear migracions a partir d'una base de dades existent

Es pot fer amb un plugin de mysql-workbench:

https://github.com/beckenrode/mysql-workbench-export-laravel-5-migrations

i també hi ha paquet Laravel:

https://github.com/Xethron/migrations-generator

Recursos:

ORM Eloquent. Definint el Model

Vegeu Eloquent

Seeds

http://laravel.com/docs/5.0/migrations#database-seeding

Vegem un exemple de Laravel seeds. Els seeds els trobareu a la carpeta:

app/database/seeds

Es pot fer un seeder per taula o tot en un sol fitxer seeder com DatabaseSeeder.php:

// app/database/seeds/DatabaseSeeder.php
<?php

class DatabaseSeeder extends Seeder {

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

        // call our class and run our seeds
        $this->call('BearAppSeeder');
        $this->command->info('Bear app seeds finished.'); // show information in the command line after everything is run
    }

}

// our own seeder class
// usually this would be its own file
class BearAppSeeder extends Seeder {
    
    public function run() {

        // clear our database ------------------------------------------
        DB::table('bears')->delete();
        DB::table('fish')->delete();
        DB::table('picnics')->delete();
        DB::table('trees')->delete();
        DB::table('bears_picnics')->delete();

        // seed our bears table -----------------------
        // we'll create three different bears

        // bear 1 is named Lawly. She is extremely dangerous. Especially when hungry.
        $bearLawly = Bear::create(array(
            'name'         => 'Lawly',
            'type'         => 'Grizzly',
            'danger_level' => 8
        ));

        // bear 2 is named Cerms. He has a loud growl but is pretty much harmless.
        $bearCerms = Bear::create(array(
            'name'         => 'Cerms',
            'type'         => 'Black',
            'danger_level' => 4
        ));

        // bear 3 is named Adobot. He is a polar bear. He drinks vodka.
        $bearAdobot = Bear::create(array(
            'name'         => 'Adobot',
            'type'         => 'Polar',
            'danger_level' => 3
        ));

        $this->command->info('The bears are alive!');

        // seed our fish table ------------------------
        // our fish wont have names... because theyre going to be eaten

        // we will use the variables we used to create the bears to get their id

        Fish::create(array(
            'weight'  => 5,
            'bear_id' => $bearLawly->id
        ));
        Fish::create(array(
            'weight'  => 12,
            'bear_id' => $bearCerms->id
        ));
        Fish::create(array(
            'weight'  => 4,
            'bear_id' => $bearAdobot->id
        ));
        
        $this->command->info('They are eating fish!');

        // seed our trees table ---------------------
        Tree::create(array(
            'type'    => 'Redwood',
            'age'     => 500,
            'bear_id' => $bearLawly->id
        ));
        Tree::create(array(
            'type'    => 'Oak',
            'age'     => 400,
            'bear_id' => $bearLawly->id
        ));

        $this->command->info('Climb bears! Be free!');

        // seed our picnics table ---------------------

        // we will create one picnic and apply all bears to this one picnic
        $picnicYellowstone = Picnic::create(array(
            'name'        => 'Yellowstone',
            'taste_level' => 6
        ));
        $picnicGrandCanyon = Picnic::create(array(
            'name'        => 'Grand Canyon',
            'taste_level' => 5
        ));
        
        // link our bears to picnics ---------------------
        // for our purposes we'll just add all bears to both picnics for our many to many relationship
        $bearLawly->picnics()->attach($picnicYellowstone->id);
        $bearLawly->picnics()->attach($picnicGrandCanyon->id);

        $bearCerms->picnics()->attach($picnicYellowstone->id);
        $bearCerms->picnics()->attach($picnicGrandCanyon->id);

        $bearAdobot->picnics()->attach($picnicYellowstone->id);
        $bearAdobot->picnics()->attach($picnicGrandCanyon->id);

        $this->command->info('They are terrorizing picnics!');

    }

}

Crear seeds a partir d'una base de dades existent

Múltiples bases de dades

Exemple interessant de com crear una base de dades per Testing i un altre per normal/explotació podeu veure a:

https://laracasts.com/series/phpunit-testing-in-laravel/episodes/5

Vegeu també

Enllaços externs