私は、Symfony 2フレームワークで構築されたDoctrine 2を使用して、データベースの継承に関する以下の問題の解決策を探しています。これは私が抽象クラスHodinyと同じインタフェースを持つ2つのテーブル(UredniHodiny、KonzultacniHodiny)を作成したい...私は何をしたいのかSymfony 2 + Doctrine 2 +継承
です。これは私がphp app/console doctrine:generate:entities CvutPWTImportBundle
symfonyは両方の子クラスにプライベート変数としてクラス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
{
}
をやろうとしている方法です。今私がapp/console doctrine:schema:update --force
でこれらのテーブルを作成しようとしているときに、エラーが発生しています。$id must be protected or weaker
。この保護を手動で変更すると、テーブルを作成できますが、列(ID)は1つだけです。しかし、これは私が望んでいたものではありません。誰かが私に間違ってやっているアドバイスをくれますか?
ねえ、これは私の期待どおりに動作します。私は 'konzultacnihodiny'というテーブルと' urednihodiny'というテーブルを得て、どちらも5つのフィールドを含んでいます。 注意HodinyベースクラスのFKであるため、2つのエンティティも追加する必要がありました。 また、使用する[継承タイプ](http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html)も確認する必要があります複数あるからです。 – Shane