Premier projet Laravel 5.4 : La mise en place (configuration & database migration) (Part. 2/7)

Avant de commencer à coder …

Dans le fichier .env à la racine de Laravel, on renseigne les infos de notre projet :

APP_NAME=laravel-test
APP_ENV=local
APP_KEY=base64:ab5zqG/MDgyFFyjIp2uVELdR36f9xrRfj2ZOew4U8ZU=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost

Pour le debug, ça ne suffit pas de l’indiquer dans .env, on va également changer cette valeur dans le fichier config/app/php pour avoir des erreurs plus explicites :

On va aussi se configurer une base de données dans le fichier config/database.php. J’utilise ici mySQL donc je vérifie que c’est bien la connexion par défaut :

'default'=> env('DB_CONNECTION', 'mysql'),

Et je renseigne mes informations de connexion :

'mysql'=> [
   'driver'=>'mysql',
   'host'=> env('DB_HOST', '127.0.0.1'),
   'port'=> env('DB_PORT', '3306'),
   'database'=> env('DB_DATABASE', 'laravel-test'),
   'username'=> env('DB_USERNAME', 'root'),
   'password'=> env('DB_PASSWORD', ''), /* pour une sécurité accrue ;) */
   'unix_socket'=> env('DB_SOCKET', ''),
   'charset'=>'utf8',
   'collation'=>'utf8_general_ci',
   'prefix'=>'',
   'strict'=>true,
   'engine'=>null,
],

On va renseigner ces informations également dans le fichier .env sinon on aura des erreur avec les commandes artisan de migration.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel-test
DB_USERNAME=root
DB_PASSWORD=

Pour notre projet, on va avoir besoin de 2 tables simples qui seront :

  • user
  • post

Pour ce faire on va passer par les méthodes de migrations de Laravel. On va créer notre première migration avec artisan :

php artisan make:migration create_post_table

Ce qui nous crée un fichier dans le dossier database/migrations

Ici, il y a une méthode up() qui est donc pour l’upgrade et une méthode down() pour le rollback.

Créons les tables en commençant par modifier les tables fournit avec Laravel :

/* CreateUsersTable */
<?php 
use Illuminate\Support\Facades\Schema; 
use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 
class CreateUsersTable extends Migration { 

   /** 
   * Run the migrations. 
   * 
   * @return void 
   */
   public function up() { 
      Schema::create('users', function (Blueprint $table) {
         $table->increments('id'); 
         $table->string('name');
         $table->string('firstname');
         $table->string('avatar_url'); 
         $table->string('email')->unique(); 
         $table->string('password'); 
         $table->rememberToken(); 
         $table->timestamps();  /* ajoute la date de creation et modification */
     }); 
   } 
   /** 
   * Reverse the migrations. 
   * 
   * @return void 
   */
   public function down() { 
      Schema::dropIfExists('users'); 
   } 
} 
/* CreatePasswordResetsTable */
<?php 
use Illuminate\Support\Facades\Schema; 
use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 
class CreatePasswordResetsTable extends Migration { 

   /** 
   * Run the migrations. 
   * 
   * @return void 
   */
   public function up() {
      Schema::create('password_resets', function (Blueprint $table) {
         $table->string('email')->index();
         $table->string('token');
         $table->timestamp('created_at');
      });
   } 
   /** 
   * Reverse the migrations. 
   * 
   * @return void 
   */
   public function down() { 
      Schema::dropIfExists('password_resets'); 
   } 
}
/* CreatePostTable */
<?php 
use Illuminate\Support\Facades\Schema; 
use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 
class CreatePostsTable extends Migration { 

   /** 
   * Run the migrations. 
   * 
   * @return void 
   */
   public function up() { 
      Schema::create('posts', function (Blueprint $table) {
         $table->increments('id'); 
         $table->string('title', 300);
         $table->string('content');
         $table->integer('user_id')->unsigned();
         $table->foreign('user_id')->references('id')->on('users');
         $table->timestamps(); /* ajoute la date de création et modification */
     }); 
   } 
   /** 
   * Reverse the migrations. 
   * 
   * @return void 
   */
   public function down() { 
      Schema::dropIfExists('posts'); 
   } 
}

On va jouer ces migrations avec la commande artisan :

php artisan migrate:refresh

Du coté de notre base de données, on peut constater que nos tables ont été créées correctement :

Et que les quelques contraintes, ici juste pour l’exemple, ont bien été créées, ici pour la table user avec l’id et l’email unique :

Et dans la table post qui a en foreign key l’id de la table user :

Notre environnement de base est en place, nous voilà prêt à coder ! On va maintenant pouvoir afficher des informations depuis la base de données 🙂

Documentation complète de configuration :https://laravel.com/docs/5.4/configuration
Documentation officielle des migrations : https://laravel.com/docs/5.4/migrations
Lien officiel sur les tests de base de données : https://laravel.com/docs/5.4/database-testing

2 réflexions au sujet de « Premier projet Laravel 5.4 : La mise en place (configuration & database migration) (Part. 2/7) »

  1. Ping : Premier projet Laravel 5.4 : Afficher les données depuis la base de données – intro (Part. 3/x) | Blog développeuse - Hamon

  2. Ping : Premier projet Laravel 5.4 : Installation (Part. 1/x) | Blog développeuse - Hamon

Laisser un commentaire