Extension des entités dans Symfony2 avec Doctrine2

Je vais avoir du mal à trouver un moyen d'étendre de manière adéquate une Entité à travers bundles Symfony2 à l'aide de Doctrine2 que l'ORM.

Il existe actuellement trois méthodes que j'ai trouvé pour l'extension des entités dans Symfony2 à l'aide de Doctrine2 que l'ORM. Mapped SuperclassSingle Table Inheritance et Class Table Inheritance. Aucun de ces travaux pour ce que je cherche à faire.

J'ai deux Faisceaux: UserBundle et BlogBundle. Je veux être en mesure d'utiliser le UserBundle dans des projets qui n'ont pas la BlogBundle, mais le BlogBundle sera toujours utilisé dans des projets qui ont de l'Utilisateur Bundle. C'est ok si la BlogBundle a des dépendances sur le UserBundle, mais pas l'inverse.

J'ai deux entités:
BlogBundle\Entity\Post et
UserBundle\Entity\User

Relation:
Il doit y avoir une relation entre les Utilisateurs et les Messages de Blog. Ceci est réalisé par l'intermédiaire d'un Author_ID propriété (colonne) sur la BlogBundle\Entity\Post objet (table) qui est associé à UserBundle\Entity\User.id

Le Problème:
Je peux appeler le UserBundle\Entity\User entité directement à partir de l'intérieur de la BlogBundle et de réaliser ce que je suis à la recherche de l'aide d'un Uni-Directionnelle de la cartographie. Cela ne me permet pas d'accéder à tous les messages d'un utilisateur à partir de l'intérieur d'un objet Utilisateur. Je peux accéder aux données via des requêtes personnalisées, mais ce n'est pas aussi propre que l'accès à des poteaux par un utilisateur par le biais de l'objet utilisateur.

Ce que je voudrais faire est de prolonger la UserBundle\Entity\User de l'objet à partir de l'intérieur de la BlogBundle, et ajouter les méthodes et les propriétés de cet objet que d'établir la Une de Beaucoup de cartographie utilisé dans le BlogBundle. Rien de tout cela est persistant, il définit simplement la relation et me permet logiquement d'accéder à tous les postes créés par un utilisateur dans une application qui implémente à la fois la BlogBundle et UserBundle par l'ajout d'une fonctionnalité nécessaire pour l'Utilisateur de l'objet dans le blog bundle (donc d'éviter une dépendance de la UserBundle à la BlogBundle).

Quand je créer un BlogBundle\Entity\Utilisateur de l'objet et de l'étendre UserBundle\Entity\User je me dois de déclarer @ORM\Table(name="usertablename"). Si je ne le fais pas, toute tentative d'accès à la BlogBundle\Entity\Utilisateur de l'objet n'a pas accès à la base de données. Aucun des ajouts dans l'étendue de l'objet persistent, cela fonctionne très bien à travers les faisceaux. Le problème, c'est quand je l'appelle "php app/console doctrine:schema:update --force", il y a un conflit depuis deux entités essayer de carte & créer la même table. J'ai essayé d'utiliser le ResolveTargetEntityListener fonctionnalité qui a été récemment mis en œuvre, mais ce, avec Mappé Superclas, des IST et de la CTI toute la force d'une dépendance sur les BlogBundle de la UserBundle.

Ci-dessous sont mes objets pour aider à illustrer mon mon installation. Ils ont été abrégés pour plus de clarté. Je sais que certains de la sémantique ne sont pas correct, mais il est destiné à communiquer les idées & configuration.

UserBundle\Entity\User

@ORM\Table(name="app_user")
@ORM\Entity
class User implements UserInterface
{
    ...
}

BlogBundle\Entity\Post

@ORM\Table(name="app_post")
@ORM\Entity
class Post
{
    ...

    @ORM\Column(name="author_id", type="integer")
    protected $author_id;

    @ORM\ManyToOne(targetEntity="\App\BlogBundle\Entity\User", inversedBy="posts")
    @ORM\JoinColumn(name="author_id", referencedColumnName="id")
    protected $author;
}

BlogBundle\Entity\Utilisateur

use App\UserBundle\Entity\User as BaseUser
@ORM\Entity
@ORM\table(name="app_user")
class User extends BaseUser
{
    ....

    @ORM\OneToMany(targetEntity="App\BlogBundle\Entity\Post", mappedBy="author")
    protected $posts;

    public function __construct()
    {
        parent::_construct();

        $this->posts = new \Doctrine\Common\Collections\ArrayCollection();
    }

    .... 
    /* Getters & Setters, nothing that defines @ORM\Column, nothing persisted */
}

Cela fonctionne, mais le problème c'est que je suis cartographie des deux entités dans le projet à la même table. L'étendue objet de ne pas saisir l' @ORM\Table(name="app_user") de son parent, il doit être défini dans BlogBundle\Entity\Utilisateur. Si pas toute référence à cet objet à partir d'un contrôleur ne va pas accéder à la base de données. Puisque rien n'est conservé de l'objet étendu rien n'est cassé, sauf quand j'essaie de mettre à jour le schéma de base de données à partir de la console.

Je peux utiliser une relation unidirectionnelle, mais cela limite comment je peux accéder aux données à partir d'un contrôleur.

source d'informationauteur Jgarib