Bonsoir,

J'ai une petite question concernant le site de A à Z. J'ai repris la structure pour l'appliquer à mon projet et dans le backoffice je me heurte à une difficulté.

Si vous voulez voici ma base :

Une table product (id, name ...)
Une table family (id, name ...)
Une table sub_family (id, name...)

Et enfin une table product_family(id, id_product, id_sub_family, id_family)

Maintenant j'aimerais que lorsqu'on édite un produit dans le backoffice, il soit possible de choisir une famille et une sous famille et renseigner ma table product_family.
J'ai déjà crée une fonction pour faire un select mais j'aimerais pouvoir lier facilement ces deux champs.

Est ce utile de faire un controller spécial pour cette table? Je ne pense pas que ce soit une très bonne idée.
Après je pensais faire une fonction spéciale dans mon controller de produit qui récupèrerait les deux données et qui renseignerait la table en concéquence. Suis je sur la bonne voie ou y a t'il une façon plus générique de résoudre mon problème?

Merci

7 réponses


Guigs63
Auteur
Réponse acceptée

J'ai finalement changé la structure de BDD, la table "Product" contient l'id de la famille et de la sous famille. C'est plus propre et plus correct au niveau Merise.

Est ce que vous avez réussi à résoudre votre problème?

Tu devrais faire une seule et même table pour la family au lieu d'avoir une table family et une table sub_family, et mettre un "parent_id" comme champ.
Si le parent_id est null ou vaut 0, alors la famille est une famille principale et s'il a un id définit c'est une sous famille. Comme ça avec ta table de liaison tu n'aurais donc qu'un simple family_id, product_id.

En gros :

products :
    id, name, ...
families:
    id, name, parent_id, ...
products_families:
    product_id, family_id

Tu auras surement moins de souci comme ça qu'une table de liaison à 3 entrées.

Et ben dans ta fonction admin_edit tu charge juste ton model de product_familly puis tu extrait tes deux select de data puis tu enregistre les deux select dans la table approprié

je veux faire une select (ComboBox) qui contient les product_id, mais j'arrive pas.
est il possible de nous faire une petit exemple de code qui nous devons ajouter dans le fichier Form.php, admin_edit.php et le FamillesController.php
merci d'avance.

Guigs63
Auteur

Merci pour vos réponses tout d'abord.

Je n'avais pas pensé au parent_id dans ma table family et c'est vrai que c'est une bonne idée, comme ça j'économise une table et je peux éditer plus facilement mes familles. Je vais essayer ces modifs et je vous tiens au courant.

Guigs63
Auteur

Après réflexion je ne peux pas ajouter parent_id dans ma table family. Parce que une sous famille est disponible dans plusieurs des familles. D'où la table product_family qui permet de tout centraliser.