2010-09-29 32 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; 
}