我试图为一个交响乐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之间创建一个关系,但是在LinkChild表中没有创建国家/地区列。
我告诉不要使用递归类,所以我必须创建Link和LinkChild。
有没有办法来完成我尝试做的事情。
提前谢谢。
答案 0 :(得分:1)
我认为你要找的是单表继承?
<?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
{
// ...
}
看看这里:
答案 1 :(得分:0)
尝试将protected $country;
变量重命名为private $childCountry;
,以使其成为专门属于LinkChild的变量。
LinkChild中的protected $country;
覆盖将被忽略,因为它与Link中的覆盖完全相同。