3

当我共同使用versionableconcrete_inheritance行为时,我遇到了一个问题:

propel > om-template:
[propel-om] Loading XML schema files...
[propel-om] 3 tables found in 1 schema files.
[propel-om] Generating PHP files...
[propel-om]     -> Updating Library/Model/om/BaseBookPeer.php (table: book, builder: PHP5PeerBuilder)
PHP Fatal error:  Call to a member function getPhpName() on a non-object in 
  C:\wamp\www\library\vendor\propel\propel1\generator\lib\behavior\versionable\VersionableBehaviorObjectBuilderModifier.php on line 313

这里有一个简化的例子来解释它:

UML 模式

一切都是可版本化的。简单的Page-Cover模式也不会引起任何问题Book-Page。但是当我开始使用 3 个表时,我遇到了之前的错误。

通常,我们使用外键和全局auto_add_pk行为会遇到此错误(由于行为是在外键之后解释的,因此 propel 在引用的表中找不到主键)。

我的schema.xml

<?xml version="1.0" encoding="UTF-8"?>
<database name="library" namespace="Library\Model" defaultIdMethod="native">

    <table name="book">
        <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
        <column name="title" type="varchar" size="255" required="true" primaryString="true" />
        <!-- #### This following behavior is my problem #### -->
        <behavior name="versionable">
            <parameter name="log_created_at" value="true" />
            <parameter name="log_created_by" value="true" />
            <parameter name="log_comment" value="true" />
        </behavior>
    </table>

    <table name="page">
        <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
        <column name="num" type="integer" required="true" />
        <column name="text" type="longvarchar"/>
        <column name="book_id" type="integer" required="true" />
        <foreign-key foreignTable="book">
            <reference local="book_id" foreign="id"/>
        </foreign-key>
        <behavior name="versionable">
            <parameter name="log_created_at" value="true" />
            <parameter name="log_created_by" value="true" />
            <parameter name="log_comment" value="true" />
        </behavior>
    </table>

    <table name="cover">
        <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
        <behavior name="concrete_inheritance">
            <parameter name="extends" value="page" />
        </behavior>
    </table>

</database>

有什么建议可以帮助我理解吗?

4

0 回答 0