Я создаю простой CMS Bundle для моего безголового symfony бэкэнда, и я пытаюсь отобразить страницу на страницу с родителем и дочерним отношением (многие дочерние элементы к одному родителю), и у меня есть этот класс, сопоставленный суперклассу, чтобы создать повторно используемый код Это уменьшенный пример того, что я пытаюсь заархивировать:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\MappedSuperclass()
*/
class Test
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function getId()
{
return $this->id;
}
/**
* @ORM\ManyToOne(targetEntity="Ziebura\CMSBundle\Entity\Test")
*/
protected $parent;
public function getParent()
{
return $this->parent;
}
public function setParent($parent)
{
$this->parent = $parent;
}
}
Затем я расширяю этот класс как обычный объект для создания таблицы БД
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Ziebura\CMSBundle\Entity\Test as BaseTest;
/**
* @ORM\Table(name="test")
* @ORM\Entity(repositoryClass="App\Repository\TestRepository")
*/
class Test extends BaseTest
{
}
Проблема это то, что я получаю это doctrine исключение
Column name `id` referenced for relation from App\Entity\Test towards Ziebura\CMSBundle\Entity\Test does not exist.
Я не совсем понимаю, почему это вызывает эту ошибку, или я пытаюсь заархивировать то, что невозможно, я уже установил связи с сопоставленным суперклассы, но это было 2 или более столов, а не только один на. Я уже пытался создать поле $ children, но оно не сработало и все равно выдало ошибку выше. Кто-нибудь пытался создать что-то подобное? Я не смог найти ничего об этом в doctrine документах, нашел только, как отобразить 2 разных суперкласса. Я полагаю, что самым простым выходом было бы указать отношение в пространстве имен App, а не в Bundle, но это в значительной степени разрушает цель повторно используемого кода, если бы мне пришлось объявить, что в каждом проекте, который я использую, комплект. Я верю в стек, давайте разберемся с этим. Спасибо!