Symfony 2 + Doctrine 2 +继承

Š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).但这不是我所希望的.有人可以给我任何建议我做错了吗?

Flo*_*ian 8

这不是表继承.映射的超类只是映射继承.与您的最终实体相对应的表格不会以任何方式依赖.

如果你想要真正的表继承(单表或连接表),请使用:http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html#single -表继承

如果您仍想使用映射的超类,则必须将该@ORM\Id定义放在最终的两个类中.您不能将ID放在映射的超类中.