Laravel est un framework PHP gratuit et open-source créé par Taylor Otwell. Il permet de développer des applications web de manière structurée, rapide et maintenable grâce à l'architecture MVC (Model-View-Controller).
routes/web.php| Couche | Fichiers | Rôle |
|---|---|---|
| Model | app/Models/*.php | Représente une table, gère les données (CRUD) |
| View | resources/views/*.blade.php | Affiche le HTML (templates) |
| Controller | app/Http/Controllers/*.php | Reçoit la requête, appelle le modèle, retourne la vue |
| Migration | database/migrations/*.php | Définit la structure des tables |
| Routes | routes/web.php | Mappe URL → Controller@method |
Artisan est la CLI de Laravel. Chaque commande suit le format : php artisan [categorie]:[action] [options]
| Commande | Option | Description |
|---|---|---|
| php artisan serve | — | Lance le serveur sur http://127.0.0.1:8000 |
| php artisan serve | --port=9000 | Changer le port d'écoute |
| php artisan serve | --host=0.0.0.0 | Accessible depuis le réseau local |
| Commande | Options principales | Description |
|---|---|---|
| php artisan make:model Nom |
-m migration-c controller-r resource ctrl-s seeder-f factory-mc modèle+ctrl-mcr tout-en-un |
Génère un modèle Eloquent dans app/Models/.Exemple : php artisan make:model Post -m → crée Post.php + migrationPuissant : php artisan make:model Article -mcr → modèle + migration + controller resource
|
| php artisan make:controller Nom |
--resource / -r CRUD--api API (sans create/edit)--model=Nom lie un modèle--invokable méthode unique __invoke |
Génère un contrôleur dans app/Http/Controllers/.--resource ajoute : index, create, store, show, edit, update, destroy
|
| php artisan make:migration nom |
--create=table nouvelle table--table=table modifier table existante |
Génère une migration dans database/migrations/.Convention : create_XXX_table (nouvelle) / add_XXX_to_YYY_table (modification)
|
| php artisan make:seeder Nom | — | Génère un seeder pour insérer des données de test |
| php artisan make:request Nom | — | Génère une Form Request (validation des données) |
| Commande | Options | Description |
|---|---|---|
| php artisan migrate | --force (production) |
Exécute toutes les migrations en attente |
| php artisan migrate:rollback | --step=N N batches |
Annule le dernier batch de migrations (down()) |
| php artisan migrate:fresh | --seed avec seeders |
⚠️ Supprime TOUTES les tables puis relance toutes les migrations |
| php artisan migrate:reset | — | Annule TOUTES les migrations (rollback de toutes) |
| php artisan migrate:status | — | Affiche l'état (Ran/Pending) de chaque migration |
| Commande | Cible |
|---|---|
| php artisan cache:clear | Cache général de l'application (Redis, Memcached…) |
| php artisan config:clear | Cache de configuration (.env modifié → toujours exécuter) |
| php artisan route:clear | Cache des routes |
| php artisan view:clear | Cache des vues Blade compilées |
| php artisan optimize:clear | 🔥 Vide TOUT le cache en une commande |
Les options (flags) modifient le comportement d'une commande. Clique pour voir les détails.
Crée le modèle ET génère automatiquement le fichier de migration correspondant.
php artisan make:model Post -m // Génère : app/Models/Post.php database/migrations/2025_01_01_000000_create_posts_table.php
Crée le modèle + migration + controller (vide) en une seule commande.
php artisan make:model Article -mc // Génère : app/Models/Article.php database/migrations/..._create_articles_table.php app/Http/Controllers/ArticleController.php
Tout-en-un : Modèle + Migration + Controller Resource (avec 7 méthodes CRUD prêtes)
php artisan make:model Produit -mcr // Le controller contient automatiquement : index() → afficher liste create() → formulaire de création store() → enregistrer en BDD show() → afficher un élément edit() → formulaire de modification update() → sauvegarder modification destroy() → supprimer
| Option | Méthodes générées | Usage |
|---|---|---|
| — | Aucune (controller vide) | Si tu veux tout écrire à la main |
| --resource / -r | index, create, store, show, edit, update, destroy (7) | App web avec formulaires |
| --api | index, store, show, update, destroy (5) — sans create/edit | API REST (pas de formulaires HTML) |
| Option | Utilité | Contenu généré dans up() |
|---|---|---|
| --create=table | Crée une nouvelle table | Schema::create('table', ...) |
| --table=table | Modifie une table existante (ajouter/supprimer colonne) | Schema::table('table', ...) |
Convention de nommage :
• Nouvelle table → create_posts_table
• Ajout de colonne → add_role_to_users_table
• Suppression → remove_phone_from_users_table
Par défaut, migrate:rollback annule seulement le dernier batch. Avec --step=N, on choisit combien de batches annuler.
php artisan migrate:rollback → annule 1 batch (le dernier) php artisan migrate:rollback --step=3 → annule les 3 derniers batches php artisan migrate:reset → annule TOUTES les migrations
Combine le rechargement de la base ET l'insertion de données de test en une commande. Workflow de développement courant :
php artisan migrate:fresh --seed // Équivalent à : php artisan migrate:fresh → Drop + migrate php artisan db:seed → Insère les données de test
25 questions · 25 secondes par question
Teste tes connaissances sur les commandes Artisan, leurs options, les migrations et la structure MVC.
12 questions · Tape la commande exacte
Tape la commande Artisan complète (copier-coller désactivé). Tu peux utiliser Entrée pour valider.
Objectif : convertir un schéma relationnel (tables + clés) en migrations Laravel avec up() et down().
Rappel de notation : attribut souligné = Clé Primaire (PK) · #attribut = Clé Étrangère (FK)
Règle d'or : La table avec la FK doit être créée APRÈS la table qu'elle référence.
// php artisan make:migration create_users_table
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('users');
}
// php artisan make:migration create_profiles_table
public function up(): void
{
Schema::create('profiles', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')
->unique() // 1-to-1
->constrained() // FK → users.id
->cascadeOnDelete();
$table->text('bio')->nullable();
$table->string('phone')->nullable();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('profiles');
}
// php artisan make:migration create_users_table
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('users');
}
// php artisan make:migration create_posts_table
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')
->constrained() // FK → users.id
->cascadeOnDelete(); // post supprimé si user supprimé
$table->string('title');
$table->text('body');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('posts');
}
// php artisan make:migration create_posts_table
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('posts');
}
// php artisan make:migration create_tags_table
public function up(): void
{
Schema::create('tags', function (Blueprint $table) {
$table->id();
$table->string('name')->unique();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('tags');
}
// php artisan make:migration create_post_tag_table
public function up(): void
{
Schema::create('post_tag', function (Blueprint $table) {
$table->foreignId('post_id')->constrained()->cascadeOnDelete();
$table->foreignId('tag_id')->constrained()->cascadeOnDelete();
$table->primary(['post_id', 'tag_id']); // clé primaire composite
});
}
public function down(): void
{
Schema::dropIfExists('post_tag');
}
| Méthode Blueprint | Type SQL | Exemple d'usage |
|---|---|---|
| $table->id() | BIGINT UNSIGNED AUTO_INCREMENT PK | Toujours en premier |
| $table->string('col') | VARCHAR(255) | name, email, title… |
| $table->string('col', 100) | VARCHAR(100) | Longueur personnalisée |
| $table->text('col') | TEXT | body, description longue |
| $table->integer('col') | INT | age, quantity… |
| $table->boolean('col') | TINYINT(1) | is_active, published… |
| $table->decimal('col', 8, 2) | DECIMAL(8,2) | prix, montant |
| $table->date('col') | DATE | birth_date, start_date |
| $table->timestamps() | created_at + updated_at | Toujours en dernier |
| $table->foreignId('user_id') | BIGINT UNSIGNED | Clé étrangère (FK) |
| ->nullable() | NULL autorisé | Modificateur chaînable |
| ->unique() | UNIQUE | email, slug, username |
| ->default(val) | DEFAULT val | ->default(0), ->default(true) |
À partir du schéma relationnel donné, construis la migration Laravel correcte. Sélectionne les bonnes méthodes Blueprint.
categories📐 Schéma :
Pas de FK. name est unique. description peut être vide.
🧩 Construis la migration :
products avec FK📐 Schéma :
price = montant décimal. stock = entier. category_id = FK vers categories.
🧩 Construis la migration products :
📐 Contexte :
La table users existe déjà → migration de modification.
🧩 Choisis la bonne approche :
Je te donne le schéma relationnel · Tu écris les fonctions up() et down() · Je valide et note les erreurs
4 schémas · Écriture libre · Validation intelligente
Écris les fonctions up() et down() complètes · Des indices progressifs disponibles si tu bloques.