2012-05-01 127 views
6

我正在尋找一個解決方案,以解決以下問題,使用構建在Symfony 2框架中的Doctrine 2進行數據庫繼承。這就是我想做的事......Symfony 2 + Doctrine 2 +繼承

enter image description here

我想用相同的接口抽象類Hodiny創建兩個表(UredniHodiny,KonzultacniHodiny)。這是我正在努力做到這一點

<?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 
{ 

} 

現在,當我運行php app/console doctrine:generate:entities CvutPWTImportBundle Symfony的產生從類Hodiny所有變量(更準確地說列)爲私有變量,以兩個子類。現在,當我試圖用app/console doctrine:schema:update --force創建這些表格時,我得到的錯誤是$id must be protected or weaker。當我手動更改此保護時,我可以創建表格,但只有一列(id)。但這不是我所希望的。有人可以給我任何建議,我做錯了什麼?

+0

嘿,這工作正如我所料。我得到一張名爲'konzultacnihodiny'的表格和一張名爲'urednihodiny'的表格,它們都包含5個字段。 注意我還需要添加兩個其他實體,因爲它們當前是Hodiny基類中的FK。 您還應該確認您想要使用的[繼承類型](http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html)因爲有不止一個。 – Shane

回答