【问题标题】:How do I find a list of subclasses for a propel model with concrete inheritance如何找到具有具体继承的推进模型的子类列表
【发布时间】:2011-04-19 01:48:21
【问题描述】:

我正在为我当地的慈善机构构建一个迷你 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”的列表 - 无需在添加新页面类型时手动创建。

有没有一种简单的方法来获得这样的列表,或者我必须用反射类等编写一些神奇的东西?

【问题讨论】:

    标签: propel concrete-inheritance


    【解决方案1】:

    在 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      相关资源
      最近更新 更多