何が悪いのかわかりません。あなたの問題を再現しようとして、私はできませんでした。
symfony 2.0.15プロジェクトでは、次のエンティティを使用しました
<?php
namespace Peter\SandboxBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="request")
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"base" = "Base"})
*/
class Requete
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
protected $discr;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set discr
*
* @param string $discr
*/
public function setDiscr($discr)
{
$this->discr = $discr;
}
/**
* Get discr
*
* @return string
*/
public function getDiscr()
{
return $this->discr;
}
}
/**
* @ORM\Table(name="base")
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"base" = "Base",
* "prosante" = "ProSante"})
*/
abstract class Base extends Requete {}
/**
* @ORM\Table(name="prosante")
* @ORM\Entity
*/
class ProSante extends Base {}
そして、このように見えるDDLをインストールしました(によって生成されたようにdoctrine:schema:update
)
CREATE TABLE request (id INT AUTO_INCREMENT NOT NULL, discr VARCHAR(255) NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB;
CREATE TABLE base (id INT NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB;
CREATE TABLE prosante (id INT NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB;
ALTER TABLE base ADD CONSTRAINT FK_C0B4FE61BF396750 FOREIGN KEY (id) REFERENCES request(id) ON DELETE CASCADE;
ALTER TABLE prosante ADD CONSTRAINT FK_420DF702BF396750 FOREIGN KEY (id) REFERENCES request(id) ON DELETE CASCADE
次に、挿入をテストするための簡単なコマンドを作成しました
// ...
protected function execute( InputInterface $input, OutputInterface $output )
{
$p = new ProSante();
$em = $this->getContainer()->get('doctrine')->getEntityManager();
$em->persist( $p );
$em->flush();
$output->writeln( 'All done' );
}
// ...
コンソールに「すべて完了」と表示されたら、データベースを直接確認しました。その結果は以下に貼り付けられています。
mysql> select * from prosante;
+----+
| id |
+----+
| 1 |
+----+
1 row in set (0.00 sec)
mysql> select * from base;
+----+
| id |
+----+
| 1 |
+----+
1 row in set (0.00 sec)
mysql> select * from request;
+----+----------+
| id | discr |
+----+----------+
| 1 | prosante |
+----+----------+
1 row in set (0.00 sec)
ここからどこへ行くのかわからない。