Bonjour,
Je veux mettre en place un système de catégories très général sur mon site web. Que seulement les administrateur peut créer des catégories pour catégoriser un type de contenu. Que je peut avoir des catégories pour des articles, projets, musique etc.
Je me suis fait une table de categories très simple :
categories
La colone type c'est juste pour regrouper les catégories par type de contenu. (Articles, Projects, Music etc). Dans un model lorsque hje déclare la relation entre le model category et projet par exemple. J'ai une liste de tous les catégories qui on un type App\Project et non tous les categories de la table.
// relation projet -> category
public function category()
{
return $this->belongsTo(Category::class);
}
Naïvement j'ajouterais un champ category_id dans tous les table où je veux categorieser mes contenus d'une table en particlier. Je me suis rendu compte que je me perdait dans mon code. Je commençais avoir trop de problème d'organisation. Je fesais des test avec phpunit. J'avais de la dificulté à écrire mes testes. J'ai consulté la documentation de Laravel à propos de relation entre model :
https://laravel.com/docs/5.6/eloquent-relationships
Je pense que mon cas est que je devrais faire une table pevot :
categories
categorisable (Table pevot)
- id
- categorisable_id ID du model (Post, Project etc)
- categorisable_id id ID de la categories attaché au contenu.
Je pense que faire une relation Polymorphic serais une bonne piste. Je pourrais utiliser le sysème sync disponible dans Laravel. Si je change le type d'une catégorie. Laravel peut faire la syncronisation.
Il y a un autre problème. Une category peut avoir plusieurs contenu, mais que les mondels (Post, Project etc) peuvent seulement avoir une categorie.
Merci de m'éclarer.