我正在尝试为交响乐 3 应用程序实现学说关系。
我有两个不同的类,一个从另一个扩展,它们与具有多对一关系的同一实体相关。
这是我的课程。
国家.php
class Country
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
* @Groups({"exposed"})
*/
private $id;
/**
* @ORMOneToMany(targetEntity="Link", mappedBy="country")
*/
private $link;
/**
* @ORMOneToMany(targetEntity="LinkChild", mappedBy="country")
*/
private $linkChild;
public function __construct()
{
$this->link = new ArrayCollection();
$this->linkChild = new ArrayCollection();
}
}
链接.php
/**
* Link
*
* @ORMTable(name="link")
* @ORMEntity(repositoryClass="DecathlonAppCollaboratorBundleRepositoLinkRepository")
* @VichUploadable
* @ORMHasLifecycleCallbacks()
*/
class Link
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
* @SerializerGroups({"link_list", "link_info"})
* @SerializerExpose()
*/
protected $id;
/**
* @var Country
*
* @ORMManyToOne(targetEntity="Country", inversedBy="link", cascade={"persist"})
* @JoinColumn(name="country_id", referencedColumnName="id")
*/
protected $country;
}
林克儿童.php
/**
* @ORMEntity(repositoryClass="DecathlonAppCollaboratorBundleRepositoryLinkChildRepository")
*/
class LinkChild extends Link
{
/**
* @var Country
*
* @ORMManyToOne(targetEntity="Country", inversedBy="linkChild", cascade={"persist"})
* @JoinColumn(name="country_id", referencedColumnName="id")
*/
protected $country;
}
我需要在链接和链接子到国家/地区之间创建关系,但在链接子表中没有创建国家列。
我告诉不要使用递归类,所以我必须创建 Link 和 LinkChild。
有没有办法完成我正在努力做的事情。
提前谢谢你。
我认为您正在寻找的是单表继承?
<?php
namespace MyProjectModel;
/**
* @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
尝试将protected $country;
变量重命名为类似private $childCountry;
的名称,使其成为专门属于 LinkChild 的变量。
您在 LinkChild 中的protected $country;
覆盖将被忽略,因为它与 Link 中的覆盖完全相同。