2015-11-13 1 views
0

J'ai ce projet où j'ai un problème, il y a 3 entités pertinentes.Symfony2, 2 types d'utilisateurs similaires, meilleure approche

User: 
    has_many: Leads 

Bot: 
    has_many: Leads 

Lead: 
    has_one: User/Bot 

Maintenant, un utilisateur et une part de bot un grand nombre des mêmes choses, mais ils utilisent des pare-feu, ils ont beaucoup de différents domaines etc, mais je veux un utilisateur et un bot d'être interchangeables en ce qui concerne de qui un lead appartient à, il peut appartenir à un bot ou à un utilisateur, jamais les deux en même temps.

Et dans beaucoup de mes autres entités où j'exécute des statistiques etc, je réfère à un seul champ, je ne vérifie pas s'il y a un utilisateur ou un bot.

Est-il possible de faire en sorte que ces deux entités partagent la même clé primaire, puis se réfèrent à une seule entité dans le champ principal?

Ou quelle serait la meilleure approche de conception dans Symfony?

Répondre

1

Si vous avez tous les champs identiques dans 2 entités, je vous recommande de laisser tomber l'entité Bot du tout. Tout ce dont vous avez besoin est juste un champ type avec les valeurs disponibles bot et user. Pour optimiser les requêtes SQL, je vous recommande de déclarer ce champ en tant que type ENUM.

De plus, si vous avez vraiment besoin de différentes entités, vous pouvez utiliser Single table inheritance avec le champ de discriminateur type décrit ci-dessus.