父母和子女阶级的学说关系

时间:2017-09-11 13:56:24

标签: php symfony doctrine-orm doctrine

我试图为一个交响乐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。

有没有办法来完成我尝试做的事情。

提前谢谢。

2 个答案:

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

看看这里:

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

答案 1 :(得分:0)

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

LinkChild中的protected $country;覆盖将被忽略,因为它与Link中的覆盖完全相同。