1

Doctrine 2 の「クラス テーブル継承機能」を XML マッピング (Symfony 2 PR 7) で使用しようとしています。

XML スーパークラス CatalogProduct の XML 定義:

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

CatalogProduct を拡張する XML スーパークラス CatalogBook の XML 定義:

<?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 app/console doctrine:generate:entities "CatalogBu​​ndle"

正常に動作しますが (entities 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()

私は、CatalogBookエンティティにCatalogProductを拡張するように指示するXMLに何かが欠けていると思います。しかし、私はDoctrine 2のドキュメントやGoogleで役立つものを見つけることができませんでした.

4

1 に答える 1

1

エンティティを生成しても、継承階層は生成されません。これは意味的に不可能だからです。doctrine:generate:entities を呼び出した後、自分で行う必要があります。

于 2011-03-11T13:01:14.660 に答える