Ceci est un article pense bête pour mon premier projet Laravel
Installation
installation prérequis PHP
$ sudo apt install php7.0-xml php7.0-mbstring php7.0-json php7.0-cli php7.0-zip php7.0-sqlite3
installation de Composer
Vous devez suivre les instructions sur https://getcomposer.org/download/
installation de Laravel de manière global
$ ./composer.phar global require "laravel/installer"
Note: je ne parle pas des problèmes de PATH
création du projet
$ $HOME/.config/composer/vendor/bin/laravel new facturation $ cd facturation $ ../.composer.phar install
Projet: la base de donnée
La configuration peut s’effectuer dans config/database.php
, mais il est préférable d’utiliser le .env pour surcharger
la conffiguration (mode débug, prod, …):
```
$ cp .env.example env.debug
$ ln -s env.debug .env
```
Générons une clé secréte ( TODO ):
```
$ php artisan key:generate
```
Nous allons maintenant paramétrer notre application pour utiliser sqlite, éditons env.debug
pour avoir:
```
APP_NAME=Tutorial
...
DB_CONNECTION=sqlite
DB_DATABASE=database.sqlite
```
La création d’une table se fait en plusieurs étapes, d’abord nous allons créer plusieurs tables (products
, customers
, items
& invoices
)
et préparer les migrations. Je préfère utiliser la migration dès le debut pour avoir les bons reflexes et ainsi avoir la flexibilité
d’étendre notre base.
La création de la table
products
:$ php artisan make:migration create_products_table --create=products Created Migration: 2017_07_26_063526_create_products_table
La migration initiale s’effectue dans
./database/migrations/2017_07_26_063526_create_products_table.php
... Schema::create('products', function(Blueprint $table) { $table->increments('id'); // la colonne par défaut est aussi id $table->string('name'); $table->string('type'); // bien physique ou location ou ... $table->float('vat', 4, 2); // 4 chiffres dont 2 derrière la virgule $table->float('price', 8, 2); // 8 chiffres dont 2 derrière la virgule $table->timestamps(); // ajoute les champs create_at et update_at }); ...
La création de la table
customers
:$ php artisan make:migration create_customers_table –create=customers
Et la migration initiale:
... Schema::create('customers', function(Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email'); $table->string('address'); //->nullable(); // l'addresse n'est pas obligatoire (?) $table->timestamps(); // ajoute les champs create_at et update_at }); ...
La table
invoice
:$ php artisan make:migration create_invoices_table --create=invoices
La migration initiale avec les relations entre
customers
etinvoices
:... Schema::create('invoices', function(Blueprint $table) { $table->increments('id'); $table->integer('customer_id'); $table->timestamps(); // ajoute les champs create_at et update_at }); ...
Et enfin la table
items
qui contiendra chaque ligne d’une facture avec le produit, son prix lors de la facture (avec réducation éventuelle, …)$ php artisan make:migration create_items_table --create=items
La migration initiale:
... Schema::create('items', function(Blueprint $table) { $table->increments('id'); $table->integer('invoice_id'); $table->integer('product_id'); $table->integer('quantity'); $table->float('price', 8, 2); // 8 chiffres dont 2 derrière la virgule $table->timestamps(); // ajoute les champs create_at et update_at }); ...
Nous allons maintenant peupler réellement la base SQLITE
$ php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table Migrating: 2017_07_26_063526_create_products_table Migrated: 2017_07_26_063526_create_products_table Migrating: 2017_07_26_064100_create_customers_table Migrated: 2017_07_26_064100_create_customers_table Migrating: 2017_07_26_064239_create_invoices_table Migrated: 2017_07_26_064239_create_invoices_table
La partie sérieuse commence maintenant, nous allons décrire le modèle de notre base avec Eloquent:
Pour le modèle
Product
:$ php artisan make:model Product Model created successfully.
Puis nous éditons app/Product.php
pour que le résultat ressemble à ça:
RIEN A FAIRE OU DEFINIR UN $this->belongsTo(‘App\Item’); ???
```
```
Pour le modèle
Customer
:$ php artisan make:model Customer Model created successfully.
Puis dans app/Customer.php
pour
```
:
```