From 338e803c5fda8b414864ba45575339b9895c7fea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment?= Date: Thu, 17 Apr 2025 15:04:13 +0200 Subject: [PATCH] Categories (NN) --- A_retenir.md | 28 ++++++++ .../Http/Controllers/CategorieController.php | 66 +++++++++++++++++++ .../Http/Requests/StoreCategorieRequest.php | 28 ++++++++ .../Http/Requests/UpdateCategorieRequest.php | 28 ++++++++ laravel/app/Models/Billet.php | 5 ++ laravel/app/Models/Categorie.php | 17 +++++ laravel/app/Models/billet_categorie.php | 12 ++++ laravel/app/Policies/CategoriePolicy.php | 66 +++++++++++++++++++ .../factories/BilletCategorieFactory.php | 23 +++++++ .../database/factories/CategorieFactory.php | 24 +++++++ ...5_04_17_123511_create_categories_table.php | 28 ++++++++ ..._124058_create_billet_categories_table.php | 39 +++++++++++ laravel/database/seeders/CategorieSeeder.php | 19 ++++++ laravel/resources/views/index.blade.php | 16 ++++- 14 files changed, 398 insertions(+), 1 deletion(-) create mode 100644 laravel/app/Http/Controllers/CategorieController.php create mode 100644 laravel/app/Http/Requests/StoreCategorieRequest.php create mode 100644 laravel/app/Http/Requests/UpdateCategorieRequest.php create mode 100644 laravel/app/Models/Categorie.php create mode 100644 laravel/app/Models/billet_categorie.php create mode 100644 laravel/app/Policies/CategoriePolicy.php create mode 100644 laravel/database/factories/BilletCategorieFactory.php create mode 100644 laravel/database/factories/CategorieFactory.php create mode 100644 laravel/database/migrations/2025_04_17_123511_create_categories_table.php create mode 100644 laravel/database/migrations/2025_04_17_124058_create_billet_categories_table.php create mode 100644 laravel/database/seeders/CategorieSeeder.php diff --git a/A_retenir.md b/A_retenir.md index 8867658..95ed643 100644 --- a/A_retenir.md +++ b/A_retenir.md @@ -10,3 +10,31 @@ - `storage` => logs, cache - `tests` => tests de l'app (automatisés) - `vendor` => le dossier de composer (on n'y touche pas) + +# Commandes PHP Artisan (Docker) + +- Créer une migration => `php artisan make:migration create_nom_table` +- migration => `php artisan migrate:fresh` +- seeder => `php artisan db:seed --class=NomSeeder` + +php artisan make:model Categorie --migration -a +php artisan make:model billet_categorie -m + +```sql +use laravel_db; +INSERT INTO billet_categorie (id, billet_id, categorie_id, created_at, updated_at) +VALUES + (1, 1, 1, NULL, NULL), + (2, 1, 2, NULL, NULL), + (3, 1, 10, NULL, NULL), + (4, 2, 3, NULL, NULL), + (5, 3, 9, NULL, NULL), + (6, 4, 1, NULL, NULL), + (7, 4, 4, NULL, NULL), + (8, 5, 5, NULL, NULL), + (9, 6, 7, NULL, NULL), + (10, 7, 1, NULL, NULL), + (11, 8, 10, NULL, NULL), + (12, 9, 6, NULL, NULL), + (13, 10, 8, NULL, NULL); +``` \ No newline at end of file diff --git a/laravel/app/Http/Controllers/CategorieController.php b/laravel/app/Http/Controllers/CategorieController.php new file mode 100644 index 0000000..a942e20 --- /dev/null +++ b/laravel/app/Http/Controllers/CategorieController.php @@ -0,0 +1,66 @@ +|string> + */ + public function rules(): array + { + return [ + // + ]; + } +} diff --git a/laravel/app/Http/Requests/UpdateCategorieRequest.php b/laravel/app/Http/Requests/UpdateCategorieRequest.php new file mode 100644 index 0000000..16989a3 --- /dev/null +++ b/laravel/app/Http/Requests/UpdateCategorieRequest.php @@ -0,0 +1,28 @@ +|string> + */ + public function rules(): array + { + return [ + // + ]; + } +} diff --git a/laravel/app/Models/Billet.php b/laravel/app/Models/Billet.php index 2fe185c..2672d1f 100644 --- a/laravel/app/Models/Billet.php +++ b/laravel/app/Models/Billet.php @@ -22,4 +22,9 @@ class Billet extends Model { return $this->hasMany(Commentaire::class); } + + public function categories() + { + return $this->belongsToMany(Categorie::class); + } } diff --git a/laravel/app/Models/Categorie.php b/laravel/app/Models/Categorie.php new file mode 100644 index 0000000..3760fd2 --- /dev/null +++ b/laravel/app/Models/Categorie.php @@ -0,0 +1,17 @@ + */ + use HasFactory; + + public function billets() + { + return $this->belongsToMany(Billet::class); + } +} diff --git a/laravel/app/Models/billet_categorie.php b/laravel/app/Models/billet_categorie.php new file mode 100644 index 0000000..dfedf89 --- /dev/null +++ b/laravel/app/Models/billet_categorie.php @@ -0,0 +1,12 @@ + */ + use HasFactory; +} diff --git a/laravel/app/Policies/CategoriePolicy.php b/laravel/app/Policies/CategoriePolicy.php new file mode 100644 index 0000000..c9b3ebe --- /dev/null +++ b/laravel/app/Policies/CategoriePolicy.php @@ -0,0 +1,66 @@ + + */ +class BilletCategorieFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + // + ]; + } +} diff --git a/laravel/database/factories/CategorieFactory.php b/laravel/database/factories/CategorieFactory.php new file mode 100644 index 0000000..50c2b92 --- /dev/null +++ b/laravel/database/factories/CategorieFactory.php @@ -0,0 +1,24 @@ + + */ +class CategorieFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + // + 'CAT_NOM' => fake()->text(10), + ]; + } +} diff --git a/laravel/database/migrations/2025_04_17_123511_create_categories_table.php b/laravel/database/migrations/2025_04_17_123511_create_categories_table.php new file mode 100644 index 0000000..0cb4a57 --- /dev/null +++ b/laravel/database/migrations/2025_04_17_123511_create_categories_table.php @@ -0,0 +1,28 @@ +id(); + $table->text('CAT_NOM'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('categories'); + } +}; diff --git a/laravel/database/migrations/2025_04_17_124058_create_billet_categories_table.php b/laravel/database/migrations/2025_04_17_124058_create_billet_categories_table.php new file mode 100644 index 0000000..7f77804 --- /dev/null +++ b/laravel/database/migrations/2025_04_17_124058_create_billet_categories_table.php @@ -0,0 +1,39 @@ +id(); + $table->unsignedBigInteger('billet_id'); + $table->foreign('billet_id') + ->references('id') + ->on('billets') + ->onDelete('cascade') + ->onUpdate('cascade'); + $table->unsignedBigInteger('categorie_id'); + $table->foreign('categorie_id') + ->references('id') + ->on('categories') + ->onDelete('cascade') + ->onUpdate('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('billet_categories'); + } +}; diff --git a/laravel/database/seeders/CategorieSeeder.php b/laravel/database/seeders/CategorieSeeder.php new file mode 100644 index 0000000..4dcc4f8 --- /dev/null +++ b/laravel/database/seeders/CategorieSeeder.php @@ -0,0 +1,19 @@ +create(); + } +} diff --git a/laravel/resources/views/index.blade.php b/laravel/resources/views/index.blade.php index e846caa..4d3ca26 100644 --- a/laravel/resources/views/index.blade.php +++ b/laravel/resources/views/index.blade.php @@ -6,8 +6,22 @@

{{ $billet->BIL_TITRE }}

+

+ Dans : + @php + $counter = 0; + @endphp + @foreach($billet->categories as $categorie) + {{ $categorie->CAT_NOM }} + @php + $counter++; + @endphp + @if(count($billet->categories) > $counter) + / + @endif + @endforeach +

{{ $billet->BIL_CONTENU }}

-
@endforeach @endsection \ No newline at end of file