Propel:尝试创建子对象时的未定义方法

时间:2012-08-07 01:34:37

标签: php inheritance propel

推进版本: 1.6.7

当我尝试在我的应用程序中运行以下代码时,我得到PropelException(此代码在控制器操作下在名为AdminController的类中运行)。有问题的代码尝试创建一个新的ContentPage对象,它是Page类的子类,并使用Propel的具体表继承

$page = new ContentPage;
$page->fromData($_POST); // Modified, more secure version of fromArray();
$page->save();

除了:

  

调用未定义的方法:getPage

在Propel生成的类getParentOrCreate中使用Propel生成的方法BaseContentPage调用该方法。

//this prevent issue with deep copy & save parent object
if (null === ($parent = $this->getPage($con))) {

我的schema.xml文件如下所示:

<!-- Page -->
<table name="page" phpName="Page">
  (columns)
</table>

<!-- ContentPage : Page -->
<table name="contentpage" phpName="ContentPage">
  <behavior name="concrete_inheritance">
    <parameter name="extends" value="page" />
  </behavior>
</table>

我的schema.xml代码中是否有问题,或者这是你们看到并解决过的错误?

1 个答案:

答案 0 :(得分:1)

您的架构可能是o.k.但今天我偶然发现了同样的错误。 我找到了一个解决方法并在github上创建了一个问题。 简而言之,它在concrete_inheritance行为源代码中注释掉三行代码,重新生成模型,如果还没有完成,则更新数据库。

https://github.com/propelorm/PropelBundle/issues/206