Blog Alphorm Logo de blog informatique spécialisé en technologie et solutions IT
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
En cours de lecture : Ajouter category_id dans Laravel
Agrandisseur de policeAa
Blog AlphormBlog Alphorm
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
Search
  • Développement
  • 3D et Animation
  • Cybersécurité
  • Infrastructure
  • Virtualisation
  • Réseaux
  • Bureautique
  • BDD
Suivez-nous
© Alphorm 2024 - Tous droits réservés
Développement

Ajouter category_id dans Laravel

L'Équipe Alphorm Par L'Équipe Alphorm 9 janvier 2025
Partager
Partager

Vous cherchez à mieux organiser vos articles dans Laravel en ajoutant des catégories.

Sans une structure claire, il devient difficile de gérer efficacement les articles et leurs catégories.

Cet article vous guide à travers l’ajout d’un champ category_id, la configuration des modèles, et la mise à jour des vues pour une meilleure organisation.

Table de matière
Migration pour category_id dans LaravelModèle Category en LaravelRelation Article-Category en LaravelAjout manuel de catégoriesModifier create dans le contrôleurUpdate vue create.blade.php LaravelFAQConclusion

Formation Laravel : Le Guide Complet du Débutant

Initiez-vous à Laravel et réalisez votre première application en toute confiance.

Découvrir cette formation
Diagramme ajout de category_id avec migration

Migration pour category_id dans Laravel

Pour commencer, ajoutez un champ category_id à la table articles en exécutant la commande suivante :

				
					
 php artisan make:migration add_category_id_column_to_articles_table --table=articles

				
			

Cela créera un fichier de migration dans le dossier database/migrations comme ceci :

Fichiers de migration Laravel montrant category_id

Ajoutez le code suivant dans la méthode up() pour modifier la table :

				
					
 public function up(): void
{
Schema::table('articles', function (Blueprint $table) {
$table->bigInteger('category_id')->unsigned()->nullable()->after('user_id');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('articles', function (Blueprint $table) {
$table->dropColumn('category_id');
});
}

				
			
Astuce Pratique : La méthode after(‘user_id’) permet de positionner la nouvelle colonne category_id après la colonne user_id pour mieux structurer la table.

Ensuite, exécutez la migration avec la commande :

				
					
 php artisan migrate

				
			
Infos : Cette commande va appliquer la migration et ajouter le champ category_id à la table articles.

Et voila le résultat dans la table article :

Table Laravel avec ajout de category_id

Modèle Category en Laravel

Créez le modèle Category avec la commande suivante :

				
					
 php artisan make:model Category

				
			

Ajoutez ensuite le code suivant dans le fichier app/Models/Category.php pour définir la relation entre Category et Article :

				
					
 class Category extends Model
{
use HasFactory;
public function articles(){
return $this->hasMany(Article::class);
}
}

				
			
Astuce Pratique : Une fois que la relation côté Category est établie, nous devons ajouter la relation inverse dans le modèle Article.

Relation Article-Category en Laravel

Dans le fichier app/Models/Article.php, ajoutez la relation suivante pour lier un article à sa catégorie :

				
					
 public function category()
{
return $this->belongsTo(Category::class)->withDefault([
'name'=>'Catégorie anonyme.',
]);
}

				
			

La méthode withDefault() permet de gérer les cas où un article n’a pas de catégorie associée. Ici, une catégorie par défaut nommée « Catégorie anonyme » est utilisée.

Ajout manuel de catégories

Insérez les catégories de manière manuelle dans la table categories pour tester la fonctionnalité. Voici un exemple des données à insérer :

id
name
slug
created_at
updated_at
1
PHP
PHP
2024-11-16 14:18:42
2024-11-16 14:18:42
2
Laravel
Laravel
2024-11-16 14:18:42
2024-11-16 14:18:42
3
JavaScript
JavaScript
2024-11-16 14:19:33
2024-11-16 14:19:33
Infos : Vous pouvez insérer ces données directement via un outil comme phpMyAdmin ou en utilisant un seeder Laravel.

Modifier create dans le contrôleur

Dans le contrôleur ArticleController, modifiez la méthode create() pour récupérer toutes les catégories et les transmettre à la vue :

				
					
 public function create()
{
$categories=Category::get();
$data = [
'title' => $description ='Ajouter un nouvel article',
'description' => $description,
'categories'=>$categories,
];
return view('article.create',$data);
}

				
			

Cette modification permet à la vue create de disposer de toutes les catégories pour les afficher dans un menu déroulant.

Update vue create.blade.php Laravel

Mettez à jour le fichier resources/views/article/create.blade.php pour inclure le champ de sélection de la catégorie :

				
					
 <form action="{{ route('articles.store') }}" method="post">
@csrf
<div class="form-group">
<label for="title">Titre</label>
<input type="text" name="title" class="form-control" value="{{ old('title') }}">
@error('title')
<div class="error">{{ $message }}</div>
@enderror
</div>
<div class="form-group">
<label for="content">Contenu</label>
<textarea class="form-control" name="content" cols="30" rows="5" placeholder="Contenu de l'article">{{ old('content') }}</textarea>
@error('content')
<div class="error">{{ $message }}</div>
@enderror
</div>
<div class="form-group">
<label for="category">Catégorie</label>
<select name="categorie" class="form-control">
<option value=""></option>
@foreach($categories as $category)
<option value="{{$category->id}}">{{$category->name}}</option>
@endforeach
</select>
@error('category')
<div class="error">{{ $message }}</div>
@enderror
</div>
<button type="submit" class="btn btn-primary">Ajouter</button>
</form>

				
			
Infos : L’utilisation de @foreach permet de remplir la liste déroulante avec les catégories disponibles.

Enfin, après avoir effectué toutes ces modifications et ajouté tous ces éléments, voici le résultat affiché :

Formez-vous gratuitement avec Alphorm !

Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.

Démarrer gratuitement
illustration processus de paiement en ligne avec étapes claires et convivialité

FAQ

Comment créer une migration pour ajouter category_id dans Laravel?
Pour ajouter un champ category_id dans une table Laravel, créez une migration avec la commande ‘php artisan make:migration add_category_id_column_to_articles_table –table=articles’. Ensuite, dans la méthode up(), utilisez Schema::table pour ajouter la colonne avec les propriétés souhaitées. Enfin, exécutez la migration avec ‘php artisan migrate’ pour appliquer vos modifications.
Comment établir une relation entre Article et Category?
Pour relier les modèles Article et Category, ajoutez dans Category une méthode articles() qui retourne this->hasMany(Article::class). Dans Article, ajoutez une méthode category() qui retourne this->belongsTo(Category::class)->withDefault([‘name’=>’Catégorie anonyme’]). Cela permet de lier un article à sa catégorie et de gérer les cas où un article n’a pas de catégorie associée.
Comment insérer des catégories dans la base de données Laravel?
Les catégories peuvent être insérées manuellement dans la table categories en utilisant des outils comme phpMyAdmin ou via un seeder Laravel. Vous pouvez définir des catégories avec des champs comme id, name, slug, created_at et updated_at pour tester la fonctionnalité de catégorisation dans votre application Laravel.
Comment récupérer des catégories dans la méthode create du contrôleur?
Dans le contrôleur ArticleController, modifiez la méthode create() pour récupérer toutes les catégories avec Category::get(). Passez ces données à la vue en les incluant dans un tableau de données. Cela permet d’afficher les catégories dans un menu déroulant, facilitant ainsi la sélection d’une catégorie lors de la création d’un nouvel article.
Comment mettre à jour la vue create.blade.php pour inclure les catégories?
Dans la vue create.blade.php, ajoutez un champ de sélection pour les catégories en utilisant une balise