当我联合使用versionable
和concrete_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
这是一个简单的例子来解释它:
一切都是可版本化的。 简单的Page-Cover
模式不会导致任何问题,Book-Page
也不会导致任何问题。但是当我开始使用3个表时,我得到了上一个错误。
通常,我们使用外键和全局auto_add_pk
行为得到此错误(因为行为在外键后被解释,推动无法在引用的表中找到主键)。
我的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>
有任何建议可以帮助我理解吗?