Bonjour

Je suis à la recherche de quelques conseils pour réaliser ceci : mon application doit gérer des sociétés de typologies différentes. Toutes les sociétés ont un tronc communs (champs nom, adresse, etc.) et chaque société à des champs spécifique à son type (nom commercial pour certains types et pas pour d'autres, etc.).

L'idéal serait d'avoir une table "societe" qui regroupe les champs communs puis une table par type de société qui contient tous les champs spécifiques ("societe_type1, societe_type2...).

Le but est de pouvoir récupérer tous les champs d'une société (le tronc commun + ses champs spécifiques).

Je débute sous Symfony et je sèche un peu. Je penche pour :
  • avoir un champs dans le tronc commun qui m'indique le type de société (ex: "type1").
  • modifier la méthode find du repository pour qu'elle récupère d'abord le type afin de déterminer sur quelle table faire un JOIN puis, dans une seconde requête, récupérer le tronc commun JOIN la table spécifique.


Je suppose que ça marche mais cela va faire deux requêtes pour récupérer un seul enregistrement (l'application devra effectuer des analyses statistiques fréquentes sur ces tables et c'est pour ça que si possible, j'aimerais éviter deux requêtes). Ce qui serait bien en fait, c'est de pouvoir déterminer dynamiquement le nom de la table à lier.

Pensez-vous que cela reste la meilleure solution ? Une meilleure idée (code SQL/DQL qui ferait cela ou autre schéma...) ?

Je pourrais aussi faire une classe entité contenant le tronc commun puis créer une nouvelle classe pour chaque typologie qui hériterait de ce tronc commun, mais cela va (forcément ?) me créer plusieurs tables, ce qui ne sera pas gérable.

Au final, l'idée serait d'avoir mon formulaire de tronc commun avec une liste déroulante permettant de choisir le type de société. Lorsque je choisis un type, le formulaire spécifique au type s'affiche sous (ou mieux, s'intègre dans) le formulaire.

J'utilise Doctrine. Et j'attends vos conseils avec impatience