Doctrine 2 l'Héritage de la Cartographie avec l'Association

REMARQUE : si ce que je veux n'est pas possible, un "pas possible" réponse sera acceptée

Dans le Doctrine 2 de la documentation sur mappage de l'héritage, il est dit il y a 2 façons :

  • Unique de l'héritage de table (STI)
  • Classe de l'héritage de table (CTI)

Pour les deux, il y a l'avertissement :

Si vous utilisez un STI/CTI entité plusieurs-à-un ou un-à-un entité vous ne devez jamais utiliser l'une des classes dans les niveaux supérieurs de l'héritage de la hiérarchie comme “targetEntity”, seuls ceux qui n'ont pas de sous-classes. Sinon Doctrine NE peut pas créer de proxy cas de cette entité et sera TOUJOURS à la charge de l'entité avec impatience.

Alors, comment puis-je procéder utiliser l'héritage, avec un lien vers la base (résumé) de la classe ? (et conserver les performances de cours)


Exemple

Un utilisateur a plusieurs Pet (classe abstraite prolongée par Dog ou Cat).

Ce que je veux faire :

class User {
    /**
     * @var array(Pet) (array of Dog or Cat)
     */
    private $pets;
}

En raison de l'avertissement dans la Doctrine de la documentation, je devrais le faire :

class User {
    /**
     * @var array(Dog)
     */
    private $dogs;
    /**
     * @var array(Cat)
     */
    private $cats;
}

C'est gênant, parce que je perds les avantages de l'héritage !

Remarque : je n'ai pas ajouter de la Doctrine des annotations pour la cartographie de base de données, mais vous pouvez comprendre ce que je veux dire

  • bonne question, vous avez probablement cibler les chiens et les chats spereratly
  • Oui, mais ce n'est pas ce que je veux faire :p
  • même ici :-/ j'ai la même situation avec des nœuds (les pages / articles / choses) et de commentaires
  • Rappelez-vous, il est juste un avertissement. Je l'ai ignoré cet avertissement cause il semble comme il n'y a pas de solution pour elle. J'ai accepté que, dans ces cas, il ne prendra pas en charge les serveurs proxy. Juste un choix entre la présentation technique et de la performance. Je choisis la première... Mais toujours curieux de savoir si il ya une solution pour cela quelque part.
  • Quelque chose doit m'échapper, mais je serais ravi de vous aider. Vous pouvez peut-être élargir votre question à inclure des exemples de ce que vous voulez faire opposition à ce que vous vous sentez comme vous avez à faire? Comme la question qui est écrit maintenant, il me semble qu'il aurait besoin de quelqu'un pour être dans le même état d'esprit typique de la Doctrine de l'utilisateur, dont je ne suis pas 🙂
  • J'ai prolongé l'exemple pour être plus clair, faites le moi savoir si c'est mieux. Merci
  • pourquoi ne pouvez-vous pas simplement d'ajouter une méthode getPets qui fusionnera les chiens et les chats et de les renvoyer?
  • Ce n'est pas une mauvaise idée, mais c'est un travail que l'héritage est censé s'occuper de :(. Et si je veux ajouter un animal de compagnie, je dois avoir quelques commutateur ou ifs avec instanceof... Beaucoup de choses bizarres pour une chose si simple. Je vais garder cela à l'esprit si aucune solution ne se lève.