我使用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创建具有不同字段和方法的新类。但是使用这段代码我在数据库中没有得到合适的列。我该如何解决这个问题?
答案 0 :(得分:0)
解决方案是指定继承树,我需要指定所有子项。例如在父类中编写以下注释。
/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="discr", type="integer")
* @DiscriminatorMap({"1" = "LicenceCase1", "2" = "LicenceCase2", "3" = "LicenceCase3"})
*/
abstract class Licence
{
// ...
}
这适合我。