2010-09-29 29 views
0

我正在爲本地慈善事業建立迷你CMS(是的,我知道我可以使用牙線工程,但他們需要自定義編碼)如何找到具有繼承性的推進模型的子類別列表

我的推進模式目前看來,這樣的: -

<?xml version="1.0" encoding="UTF-8"?> 
<database name="sja" defaultIdMethod="native"> 
    <table name="section"> 
     <column name="id" type="INTEGER" primaryKey="true" required="true" autoIncrement="true" /> 
     <column name="title" type="VARCHAR" required="true" /> 
     <column name="slug" type="VARCHAR" required="true" /> 
    </table> 
    <table name="page"> 
     <column name="id" type="INTEGER" primaryKey="true" required="true" autoIncrement="true" /> 
     <column name="title" type="VARCHAR" required="true" /> 
     <column name="section_id" type="INTEGER" required="true" /> 
     <foreign-key foreignTable="section"> 
      <reference local="section_id" foreign="id" /> 
     </foreign-key> 
    </table> 
    <table name="static_page"> 
     <behavior name="concrete_inheritance"> 
      <parameter name="extends" value="page" /> 
     </behavior> 
     <column name="content" type="LONGVARCHAR" required="true" /> 
    </table> 
    <table name="home_page"> 
     <behavior name="concrete_inheritance"> 
      <parameter name="extends" value="page" /> 
     </behavior> 
     <column name="standfirst_title" type="VARCHAR" /> 
     <column name="standfirst_image" type="VARCHAR" /> 
     <column name="standfirst_content" type="VARCHAR" /> 
    </table> 

</database> 

我希望能夠得到一個列表,其中將包括「home_page」和「static_page」 - 而無需手動創建此每當我添加了新的一頁類型。

有沒有簡單的方法來得到這樣的列表,還是我必須寫一些反射類的魔術東西等?

回答

0

從freenode上#propel正確的方向一捅後 - 我想出這個爲基本理念 - 沒有測試它尚未雖然

function getSubClasses() 
{ 
    $map = $this->getDatabaseMap(); 
    $children = array(); 
    foreach ($map->getRelations() AS $relation) 
    { 
     $behaviours = $relation->getRightTable()->getBehaviours(); 

     if (issset($behaviours['concrete_inheritance']['extends']) AND $behaviours['concrete_inheritance']['extends'] == $this->getDatabaseMap()->getClassName()) 
     { 
      $children[] = $relation->getRightTable()->getClassName(); 
     } 
    } 
    return $children; 
} 
相關問題