Sélectionner une page

Nous allons maintenant créer une nouvelle table categories qui contiendra comme son nom l’indique les catégories dans notre site à l’aide de l’outil migration de Laravel, créer le modèle et afficher les informations qu’elle contient dans une vue.

Créer une table avec l’outil de migration

Le fichier de migration permet à Laravel de créer des tables dans la base et d’en suivre les modifications. Pour cela, il faut bien sur avoir connecté la base de données… Pour utiliser l’outil de migration et générer les bases du fichier, écrivez la commande suivante en SSH.

php artisan make:migration create_categories_table

vous devez maintenant avoir un fichier nommé 2016_11_28_130745_create_categories_table.php dans le répertoire database/migrations. Il contient les bases requises. Nous allons ensuite le modifier pour y insérer les champs qui nous intéressent. Comme nous voulons ajouter les champs nom et parent, nous modifions comme suit:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoriesTable extends Migration
{
 public function up()//fonction de création appelée lors de la commande: php artisan migrate
 {
 Schema::create('categories', function (Blueprint $table) {
 $table->increments('id');
 $table->string('name');
 $table->integer('parent')->default(0);
 $table->timestamps();//ajoute les champs created_at et updated_at
 });
 }

 public function down()//fonction inverse à la création appelée lors de la fonction : php artisan migrate:rollback
 {
 Schema::drop('categories');
 }
}

La liste des type de colonnes possible est disponible sur la doc de laravel. Pour exécuter le fichier de création, il suffit de faire la commande suivante qui aura pour effet de créer votre table categories dans la base de données:

php artisan migrate
// pour annuler les migrate dans l'ordre ou ils ont été effectués
// php artisan migrate:rollback

Créer le modèle correspondant à la table

Pour créer votre modèle, Laravel nous met a disposition un outil de création. Nous allons donc créer notre modèle Categorie qui comme vous l’avez constaté et au singulier. Pour créer ce modèle nous exécutons la commande suivant qui va généré le fichier et le placer dans le répertoire app\:

php artisan make:model Categorie

Nous ouvrons modifions ce fichier pour qu’il contiennent le code suivant:

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\Model;

class Categorie extends Model
{
 use Notifiable; 
 
 protected $table = 'categories';//nom de notre table
 public $timestamps = true; //champs created_at updated_at 
 
 protected $fillable = [ //champs que l'on peut modifier
 'name',
 ];
 
}


protected $fillable = [] permet de signaler quels sont les champs que l’on pourra modifier. Si vous désirez utiliser l’approche inverse et ne signaler que ceux que l’on ne pourra pas modifier utiliser la notation suivante:  $guarded = [‘id’]; // inverse de $fillable

Afficher et modifier les données d’un table

Pour créer et afficher les données présentes dans la table, nous allons créer une controller, une vue et modifier le fichier web.php. Afin de donner plus rapidement un aperçu je vais tout modifier d’un coup et vous expliquer après.

Ajouter les lignes suivantes à la fin du fichier routes\web.php

Route::get('/categories', 'Frontend\CategoriesController@index');
Route::get('/categories/create', 'Frontend\CategoriesController@create');
Route::get('/categories/last/', 'Frontend\CategoriesController@last');
Route::get('/categories/first/', 'Frontend\CategoriesController@first');
Route::get('/categories/find/{categorieId}', 'Frontend\CategoriesController@find');
Route::get('/categories/{categorieId}', function ($categorieId) {
 return \App\Categorie::find($categorieId);
});

Créez le fichier app\Http\Controllers\Frontend\CategoriesController.php contenant ce qui suit:


 public function last()
 {
 $categorie = \App\Categorie::all()->last();
 return view('frontend.categories',array('categories'=>$categorie));
 }
 public function first()
 {
 $categorie = \App\Categorie::first();
 return view('frontend.categories',array('categories'=>$categorie));
 }
 public function create()
 {
 // méthode de création d'objets
 $categorie = \App\Categorie::create([
 'name'=>'categorie_'.mt_rand(0,200),
 ]);
 // autre méthode de création d'objets
 $new_cat = new \App\Categorie; // attention, il y a bien sur un NEW
 $new_cat->name = 'categorie_methode2_'.mt_rand(0,200);
 $new_cat->save();
 
 $categories = \App\Categorie::all();//retourne toutes les donnée
 return view('frontend.categories',array('categories'=>$categories));
 
 }
 public function find($categorieId)
 {
 $categories = \App\Categorie::where('name','like','%'.$categorieId.'%')->get()->first();
 return view('frontend.categories',array('categories'=>$categories));
 }
}

Et la vue contenant le code ci-dessous (resources\view\frontend\categories.php)

//nous regadrons si c'est une collection ou un objet pour utiliser 
//la même view sans avoir d'exception
if(sizeof($categories)>1){
 echo "***** Une collection ********
";
 foreach($categories as $cat)
 {
 echo $cat->id." ".$cat->name."
";
 }
} else {
 echo "******** Un objet ********
";
 print_r($categories->name);
}

Vous comprendrez très vite une fois les pages affichées.

http://www.votre-site.com/categories/create : Va créer automatiquement des catégories en appelant CategoriesController::create() et afficher la liste de toutes les catégories à l’aide de la vue.

http://www.votre-site.com/categories: Va afficher la liste de toutes les catégories à l’aide de la vue.

http://www.votre-site.com/categories/find/8 : Va utiliser la fonction find du controller CategoriesController.php pour trouver les categories ayant 8 dans leur nom. S’il n’y en a pas il n’affichera rien sinon il affichera la liste à l’aide de la vue que nous venons de créer.

http://www.votre-site.com/categories/1 : Retourne la catégorie ayant pour id 1 sans passer par une vue ou un controller. C’est le moyen le plus rapide de voir les données du modèle.

http://www.votre-site.com/categories/first : Retourne le premier enregistrement de la table

http://www.votre-site.com/categories/last: Retourne le dernierenregistrement de la table