Учение об отношениях для родителей и детей

Я пытаюсь реализовать доктринальную связь для приложения Symphony 3.

У меня есть два разных класса, один расширяется от другого, которые связаны с одной и той же сущностью с отношением «многие к одному».

Вот мои занятия.

Country.php

class Country
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @Groups({"exposed"})
*/
private $id;

/**
* @ORM\OneToMany(targetEntity="Link", mappedBy="country")
*/
private $link;

/**
* @ORM\OneToMany(targetEntity="LinkChild", mappedBy="country")
*/
private $linkChild;

public function __construct()
{
$this->link = new ArrayCollection();
$this->linkChild = new ArrayCollection();
}
}

Link.php

/**
* Link
*
* @ORM\Table(name="link")
* @ORM\Entity(repositoryClass="Decathlon\AppCollaboratorBundle\Reposito\LinkRepository")
* @Vich\Uploadable
* @ORM\HasLifecycleCallbacks()
*/
class Link
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @Serializer\Groups({"link_list", "link_info"})
* @Serializer\Expose()
*/
protected $id;

/**
* @var Country
*
* @ORM\ManyToOne(targetEntity="Country", inversedBy="link", cascade={"persist"})
* @JoinColumn(name="country_id", referencedColumnName="id")
*/
protected $country;
}

LinkChild.php

/**
* @ORM\Entity(repositoryClass="Decathlon\AppCollaboratorBundle\Repository\LinkChildRepository")
*/
class LinkChild extends Link
{

/**
* @var Country
*
* @ORM\ManyToOne(targetEntity="Country", inversedBy="linkChild", cascade={"persist"})
* @JoinColumn(name="country_id", referencedColumnName="id")
*/
protected $country;
}

Мне нужно создать связь между Link и LinkChild to Country, но в таблице LinkChild столбец страны не создается.

Я сказал не использовать рекурсивные классы, поэтому я должен создать Link и LinkChild.

Есть ли способ сделать то, что я пытаюсь сделать.

Заранее спасибо.

0

Решение

Я думаю, что вы ищете, наследование одной таблицы?

<?php
namespace MyProject\Model;

/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
class Person
{
// ...
}

/**
* @Entity
*/
class Employee extends Person
{
// ...
}

Посмотрите здесь:

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html#single-table-inheritance

1

Другие решения

Попробуйте переименовать ваш protected $country; переменная что-то вроде private $childCountry; сделать его переменной, которая принадлежит конкретно LinkChild.

Ваш protected $country; Переопределение в LinkChild игнорируется, поскольку оно точно такое же, как в Link.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector