Есть ли способ заменить Doctrine класс сущности - PullRequest
0 голосов
/ 27 апреля 2020

У меня следующий случай:

В пакете у меня есть сущность:

class Company
{
    /**
     * @var int
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var string
     * @ORM\Column(type="string", length=255)
     */
    private $name;

    /**
     * @var string
     * @ORM\Column(type="string", length=255, unique=true)
     * @Gedmo\Slug(fields={"name"})
     */
    private $slug;

    /**
     * @ORM\ManyToOne(targetEntity="Category", inversedBy="children")
     * @ORM\JoinColumn(name="parent", referencedColumnName="id", onDelete="cascade")
     */
    protected $parent;

    /**
     * @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
     */
    protected $children;

    ...
}

Теперь я хочу добавить дополнительные поля в приложение, но для этого мне нужно расширить класс:

class AppCategory extends Category
{
    /**
     * @var Article[]
     * @ORM\OneToMany(targetEntity="Acme\ArticleBundle\Entity\Article", mappedBy="category")
     */
    private $articles;

    /**
     * @var Media|null
     * @ORM\ManyToOne(targetEntity="Acme\MediaBundle\Entity\Media")
     * @ORM\JoinColumn(nullable=true, onDelete="SET NULL")
     */
    private $image;

    ...
}

и в doctrine config я сопоставил BaseClass с его целью:

doctrine:
  orm:
    resolve_target_entities:
      Acme\CategoryBundle\Entity\Category: App\Entity\AppCategory
  ...

После этого я не только теряю связи, определенные в базовом классе:
- родитель
- дети
Но также когда я выбираю категорию, она все равно дает мне экземпляры категории вместо AppCategory:

$entity = $this->doctrine->getRepository(\Acme\CategoryBundle\Entity\Category::class)->findOneBy([]);
dump(get_class($entity)); 
  // Shows Acme\CategoryBundle\Entity\Category
  // Instead of  App\Entity\AppCategory

До сих пор мне удавалось обходить отсутствующие отношения с помощью используя событие loadClassMetadata для удаления значения inherited из метаданных, и это, похоже, решает эту проблему, но я все еще получаю неправильный класс объектов Hydrated.

Что мне нужно сделать, чтобы doctrine всегда вернуть дочерний объект?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...