Как расширить сущность с помощью MappedSuperclass - PullRequest
0 голосов
/ 05 октября 2019

У меня есть два пакета, один из них как основной, а другой как модуль, так что может быть или нет, в зависимости от конфигурации приложения.

Некоторые сущности из основного комплекта имеют отношение к моим модулям, например, у меня есть модуль резервирования, который имеет отношение один-ко-многим с продуктом. Товар из основного комплекта. Иногда мне нужно отключить модуль бронирования, но в этом случае связь с продуктом предупредит меня, что связь с бронированием не существует.

Чтобы решить эту проблему, я подготовил суперкласс с тем же именем, что и в модуле (резервирование), и этот объект имеет отношение только к моему продукту. Резервирование сущности из модуля просто расширяется этим суперклассом.

В базе данных все выглядит нормально, но только если я хочу использовать внутреннее соединение. Он просто возвращает, что не имеет ассоциации с именем serialNumber

namespace Test\MainBundle\Entity;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\MappedSuperclass;
use Doctrine\ORM\Mapping as ORM;
/** @MappedSuperclass */
class Reservation
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var Test\MainBundle\Entity\Product
     *
     * @ORM\ManyToOne(targetEntity="Test\MainBundle\Entity\Product")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="product_id", referencedColumnName="id")
     * })
     */
    private $products;
}
namespace Test\ReservationBundle\Entity;
use Test\MainBundle\Entity\Reservationas BaseReservation;
class Reservation extends BaseReservation
{

    /**
     * @ORM\OneToMany(targetEntity="Test\ReservationBundle\Entity\SerialNumber", mappedBy="documentSerialNumber", cascade={"all"})
     *
     */
    private $serialNumber;

}

Когда я строю запрос по приведенному ниже коду, у меня нет доступа к отношению serialNumber

$query = $this->doctrine->getRepository('TestMainBundle:Product')->createQueryBuilder('product');

Но еслиЯ создаю запрос по приведенному ниже коду, я могу получить доступ к продукту и серийному номеру.

$query = $this->doctrine->getRepository('TestReservationBundle:Reservation')->createQueryBuilder('reservation');
...