Bonjour,

Voila je rencontre un petit problème avec mon code.
J'aimerai créer des sous categories. Le problème c'est que je ne sais pas comment prendre le problème :

  • doit-on rattacher les sous catégories à un article : le principe est-il donc de créer une nouvelle clés étrangère dzns la table Post qui ferait la jointure avec la table qui gère les sous-catégorie (mais alors comment rattacher la sous catégorie à la catégorie) ;
  • doit-on rattacher la sous catégorie à la catégorie souhaitée également par une jointure de table (mais alors comment rattacher la sous catégorie à l'article).

Quelqu'un peut-il m'aider pour m'indquer quel est le principe en terme de codage et en terme de bonne pratique.
Merci d'avance pour votre aide.

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

Entourez votre code pour bien le mettre en forme

Ce que je veux

Décrivez ici ce que vous cherchez à obtenir

Ce que j'obtiens

Décrivez ici vos erreurs ou ce que vous obtenez à la place de ce que vous attendez :(

14 réponses


Une catégorie peut être reliée à une catégorie (parent_id)
Un post est relié à une catégorie (category_id)

Categories
id
name
slug
parent_id

Posts
id
name
...
category_id

tikoum
Auteur

Merci pour ta réponse balsakup.
Mais ce qui voudrais dire que tu ne peux pas rattacher le post à la sous catégorie. Parce que justement ce que j'aimerai faire, c'est au moment de la création du post, rattacher celui-ci à une catégorie (avec le category_id ds la table post), et à une éventuelle sous catégorie (avec le parent_id dans la table Catégorie) mais je n'y suis pas arrivé. c'est pour cela que j'avais envisagé une deuxième clé étrangère dans la table Post => mais dans ce cas comment rattacher la sous catégorie à une catégorie ?

Dans mon exemple catégories et sous-catégories se trouvent dans le même table.

Exemple:
Catégories

1, 'Catégorie principale', 'categorie-principale', NULL
2, 'Sous-catégorie'         , 'sous-categorie', 1

Ici, Sous-catégorie est une sous-catégorie de catégorie principale.
C'est comme ça que je comprend ta demande.

Peut être, toi, tu envisages d'avoir plusieurs catégories associées au post, dans ce cas là, tu t'es mal exprimé

Dans ce cas là, tu as besoin de 3 trables

Posts(id, name, slug, content, created)
Categories(id, name, slug, parent_id)
PostsCategories(post_id, category_id)

La table PostsCategories permettra de lier plusieurs catégories au post

Exemple
Posts

1, 'Premier post', 'premier-post', 'Je suis le contenu', '2017-08-04'

Catégories

1, 'Catégorie principale', 'categorie-principale', NULL
2, 'Sous-catégorie'         , 'sous-categorie', 1
3, 'Truc',                          , 'truc', NULL

PostsCatégories

1, 2
1, 3

Ici, la post sera associé à la catégorie 2 et 3

Je sais pas si j'ai été clair, ça aurait été plus facile à expliquer avec un MLD ^^

tikoum
Auteur

Non, je n'envisage pas de lier l'article à plusieurs catégories principales et sous-categorie est bien une sous catégorie d'une categorie comme tu l'as indiqué. Pour arriver à cet objectif, et si j'ai bien compris, la table Post devrait ainsi inclure, outre le champ category_id (pour lier le post à une catégorie), un champ parent_id pour lier le Post à une sous-catégorie ?

tikoum
Auteur

En relisant ton premier post, j'ai compris que parent_id était dans la table categorie. Mais comment tu fais pour faire la jointure entre la catégorie et la sous catégorie "parent_id" à l'intérieur d'une même table ?

Si parent_id = NULL => C'est une Categorie
Si parent_id = 2 => C'est une Sous catégorie de la catégorie ayant pour ID 2

Et avec ce système, tu peux faire des sous catégorie, des sous sous catégories, des sous sous sous catégorie ( et j'arrete là c'est trop long :p )

tikoum
Auteur

Ok, je vais etudier tout cela ce soir. Merci à vous 2.

tikoum
Auteur

Bonjour,

J'ai réfléchi au problème mais j'avoue être un plutôt dépassé techniquement (je suis débutant et la programmation n'est pas mon métier). J'ai compris que :

  • si parent_id était null => il s'agissait d'une catégorie principale ;
  • si parent_id avait une valeur, il s'agissait de la sous-catégorie d'une catégorie principale dont l'id a la même valeur.
  • categories et sous catégorie sont dans la même table.

J'ai créé un controlleur NativesController (pour créer les sous catégories) et j'y ai ajouté un type dans la table pour les identifier. Par contre, je ne vois pas du tout comment, dans une fonction, faire une jointure dans une même table pour les deux éléments (l'id de la catégorie et le parent id de la sous catégorie).

Je poste ci-après mon début de code

Je pense que j'ai écrit n'importe quoi, je revois mon code demain.

Merci d'avance pour votre aide.

Tu n'as pas besoin de faire jointure, en principe elle est déjà faite.
T'as juste à faire des conditions sql (ou/et php) pour dire que tu veux les catégorie ou les sous catégorie ou les deux.

tikoum
Auteur

Pouvez vous me dire svp si, avec la première méthode décrite par balsakup, c'est à dire une table commune pour catégorie et parent_id on peut avoir plusieurs sous catégories rattachées à une catégorie principale. Vraiment je galère. Merci pour votre aide.

Roh lala tu le fais exprès ?

| Table Catégorie |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
id | name            | sous catégorie
1  | vetement        | NULL
2  | chaussure       | NULL
3  |  chausson       | 2
4  | T-shirt         | 1
5  | chaussette      | 3

Alors ici, nous avons 2 catégories : Vetement et chaussure.
Ainsi que 2 sous catégorie : Chausson et T shirt.
Chausson est une sous catégorie de chaussure et Tshirt de vetement.

Et petit bonus, chaussette est une sous catégorie de chausson.

Voilà Monsieur :)

tikoum
Auteur

Pas du tout exprès. ça fait 4 js que je me prends la tête avec ça (je te l'ai dit l'informatique n'est pas mon métier). Donc une categorie peut avoir plusieurs sous catégories (relis bien mes messages).
En reprenant ton exemple, j'ajoute lacets qui sera une deuxième sous catégorie de chaussures

id | name            | sous catégorie
1  | vetement        | NULL
2  | chaussure       | NULL
3  |  chausson       | 2
4  | T-shirt         | 1
5  | chaussette      | 3
6  | lacets          | 2

Je bloquais car je croyais que la catégorie et la sous catégorie avait obligatoirement le même id.
Bon maintenant , il faut que je contruise la requête. J'en ai pas terminé, mais si c'est bien ça, j'aurais au moins compris le principe.

Il faut bien te dire que l'id est unique et propre à chaque enregistrement. Tu as en effet compris le principe.

tikoum
Auteur

Merci fital. dès que j'aurais un moment, je vais travailler sur la requête