2011-03-09 85 views
1

我想使用XML映射(Symfony 2 PR 7)的Doctrine 2的“类表继承特性”。在XML超CatalogProduct的如何使用Doctrine 2中的“类表继承”与XML映射

XML定义:XML超CatalogBook的

<?xml version="1.0" encoding="UTF-8"?> 
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping 
          http://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> 
    <entity name="MyApp\CatalogBundle\Entity\CatalogProduct" table="catalog_product" inheritance-type="JOINED"> 
     <discriminator-column name="discr" type="string" /> 
     <discriminator-map> 
      <discriminator-mapping value="book" class="MyApp\CatalogBundle\Entity\CatalogBook" /> 
     </discriminator-map> 
     <id name="id" type="integer" column="id"> 
      <generator strategy="AUTO"/> 
      <sequence-generator sequence-name="tablename_seq" allocation-size="100" initial-value="1" /> 
     </id> 
     <field name="name" column="name" type="string" length="50" nullable="true" unique="false" /> 
     <field name="isPublic" column="is_public" type="boolean" />   
    </entity>  
</doctrine-mapping> 

XML定义,应该扩展CatalogProduct:

<?xml version="1.0" encoding="UTF-8"?> 
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping 
          http://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> 
    <entity name="MyApp\CatalogBundle\Entity\CatalogBook" table="catalog_book"> 
     <id name="id" type="integer" column="id"> 
      <generator strategy="AUTO"/> 
      <sequence-generator sequence-name="tablename_seq" allocation-size="100" initial-value="1" /> 
     </id> 
     <field name="author_name" column="author_name" type="string" length="50" nullable="true" unique="false" /> 
    </entity>  
</doctrine-mapping> 

./php应用程序/控制台学说:生成:实体“CatalogBu​​ndle”

正常工作(实体generatetd),但CatalogBook原来是一个“简单”类,不扩展CatalogProduct。

$book = new CatalogBook(); 
$book->setAuthorName('some author'); 
$book->setName('some book name'); 

导致异常:

Fatal error: Call to undefined method MyApp\CatalogBundle\Entity\CatalogBook::setName() 

我猜,我缺少的东西XML,它告诉CatalogBook实体延伸CatalogProduct。但是我没有在Doctrine 2文档或谷歌上找到任何帮助。

回答

1

生成实体不会为您生成继承层次,因为从语义上讲这是不可能的。你必须在调用原则之后自己做:generate:entities。