2017-09-11 69 views
0

我试图为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; 
} 

我需要同时创建链接和LinkChild给国家,但没有一个国家之间的关系列在LinkChild表中创建。

我已经告诉不要使用递归类,所以我必须创建Link和LinkChild。

有没有一种方法来实现我想要做的事情。

预先感谢您。

回答

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 
{ 
    // ... 
} 

到这里看看:

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

0

尝试重命名你的protected $country;变量类似private $childCountry;,以使其成为专门属于LinkChild一个变量。

您的protected $country;在LinkChild中的重写将被忽略,因为它与Link中的重写完全相同。