Symfony2フレームワークに組み込まれたDoctrine2を使用したデータベース継承に関する次の問題の解決策を探しています。これが私がやりたいことです...
抽象クラスHodinyと同じインターフェイスで2つのテーブル(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)は1つだけです。しかし、これは私が望んでいたことではありません。誰かが私が間違っていることについて何かアドバイスをくれますか?