在子类usine Doctrine 2 ORM中为继承字段创建列

时间:2016-08-18 13:55:22

标签: php orm doctrine-orm symfony

我使用Symfony 3.我有一个父类许可证,它有一些字段:

<?php
namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

class Licence
{
/**
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 * @ORM\Column(type="integer")
 */
protected $id;

/**
 * @ORM\Column(
 *    type="string",
 *     unique=true,
 *     length=30,
 *     nullable=false
 *     )
 */
protected $licenceKey;
}

我有一个延伸这个的儿童班。当然,它有相同的字段,但我需要将它们存储在特定位置的数据库中: 所以我写了以下内容:

namespace AppBundle\Entity\LicenceCase\FirstLicenceCase;

use AppBundle\Entity\Licence as BaseLicence;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="lic_first")
 * @ORM\InheritanceType("SINGLE_TABLE")
 */
class FirstLicenceCase extends BaseLicence
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    private $id;

    public function getLicenceKey()
    {
        return $this->licenceKey;
    }
   public function setLicenceKey($licenceKey)
    {
        $this->licenceKey = $licenceKey;
    }
}

我需要获取任何特定LicenceCase的唯一列。我将为每个LicenceCase创建具有不同字段和方法的新类。但是使用这段代码我在数据库中没有得到合适的列。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

解决方案是指定继承树,我需要指定所有子项。例如在父类中编写以下注释。

/**
 * @Entity
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="discr", type="integer")
 * @DiscriminatorMap({"1" = "LicenceCase1", "2" = "LicenceCase2", "3" = "LicenceCase3"})
 */
 abstract class Licence
 {
   // ...
 }

这适合我。