Ště*_*ler 6 php inheritance doctrine symfony doctrine-orm
我正在使用Symfony 2框架中内置的Doctrine 2搜索数据库继承的以下问题的解决方案.这就是我想要做的......

我想创建两个表(UredniHodiny,KonzultacniHodiny),其界面与抽象类Hodiny相同.这就是我试图这样做的方式
<?php
// src/CvutPWT/ImportBundle/Entity/Hodiny.php
namespace CvutPWT\ImportBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\MappedSuperclass
*/
abstract class Hodiny
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Osoba")
*/
protected $osoba;
/**
* @ORM\ManyToOne(targetEntity="Mistnost")
*/
protected $mistnost;
/**
* @ORM\Column(type="datetime")
*/
protected $zacatek;
/**
* @ORM\Column(type="datetime")
*/
protected $konec;
}
<?php
// src/CvutPWT/ImportBundle/Entity/KonzultacniHodiny.php
namespace CvutPWT\ImportBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="konzultacnihodiny")
*/
class KonzultacniHodiny extends Hodiny
{
}
<?php
// src/CvutPWT/ImportBundle/Entity/UredniHodiny.php
namespace CvutPWT\ImportBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="urednihodiny")
*/
class UredniHodiny extends Hodiny
{
}
Run Code Online (Sandbox Code Playgroud)
现在,当我运行php app/console doctrine:generate:entities CvutPWTImportBundleSymfony 时,从Hodiny类生成所有变量(更确切地说是列)作为私有变量到两个子类.现在,当我试图创建那些表时,app/console doctrine:schema:update --force我遇到了错误$id must be protected or weaker.当我手动更改此保护时,我可以创建表,但只有一列(id).但这不是我所希望的.有人可以给我任何建议我做错了吗?
这不是表继承.映射的超类只是映射继承.与您的最终实体相对应的表格不会以任何方式依赖.
如果你想要真正的表继承(单表或连接表),请使用:http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html#single -表继承
如果您仍想使用映射的超类,则必须将该@ORM\Id定义放在最终的两个类中.您不能将ID放在映射的超类中.