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.
Initiez-vous à Laravel et réalisez votre première application en toute confiance.
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 :
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');
});
}
Ensuite, exécutez la migration avec la commande :
php artisan migrate
Et voila le résultat dans la table article :
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);
}
}
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 |
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 :
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.
FAQ
Comment créer une migration pour ajouter category_id dans Laravel?
Comment établir une relation entre Article et Category?
Comment insérer des catégories dans la base de données Laravel?
Comment récupérer des catégories dans la méthode create du contrôleur?
Comment mettre à jour la vue create.blade.php pour inclure les catégories?
Conclusion
L’ajout d’un champ category_id et l’établissement de relations entre modèles enrichissent la gestion des articles dans Laravel. Quel autre aspect de Laravel souhaitez-vous explorer pour améliorer votre projet?