2012-08-07 81 views
2

行走版本:1.6.7的Propel:試圖創建子對象時未定義的方法

我得到一個PropelException當我嘗試在我的應用程序運行下面的代碼(這個代碼在一個名爲AdminController類運行在控制器操作下)。有問題的代碼試圖創建一個新的ContentPage對象,這是一個子類Page類和使用波輪的混凝土表繼承

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

唯一的例外是:

電話undefined方法: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代碼,或者這是你們所看到的和周圍的工作中的錯誤?

+0

我們可以看到更多的周圍正在生成錯誤的行代碼?它屬於另一個班級,但是如果沒有看到那個班級,很難看出是什麼引發了這個錯誤。 – DaOgre 2012-08-07 21:27:50

+0

DaOrge,你是說在我的第一個例子中?這真的很多。 '...'段實際上是'$ page-> fromArray($ _ POST)'調用的修改版本。代碼位於控制器操作中。我用我剛纔描述的內容附加了我的問題。 主要關注的是'getPage'函數在生成的類或解決方案的其餘部分中不存在,因爲它不是由Propel生成的(Propel應該生成'getPage'方法,因爲它正在生成調用它)。 感謝您的輸入。 – satoshipayne 2012-08-08 01:57:53

+0

在運行$ this-> getPage並確認它與您期望的相同的對象類型之前,您可以執行$ this對象的print_r,然後檢查getPage方法的結果基類嗎?如果這不起作用,請嘗試在GitHub上發佈儘可能多的代碼,並鏈接,我會看看 – DaOgre 2012-08-11 06:17:19

回答

1

您的模式可能是o.k.但今天我偶然發現了同樣的錯誤。 我找到了解決方法,並在github上創建了一個問題。 簡而言之,它會在concrete_inheritance行爲源代碼中註釋三行代碼,重新生成模型,並且如果尚未完成,請更新數據庫。

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

相關問題