当我共同使用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
行为会遇到此错误(由于行为是在外键之后解释的,因此 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>
有什么建议可以帮助我理解吗?