Wie kann ich mit konkreter Vererbung eine Liste von Unterklassen für ein propel Modell finden

StackOverflow https://stackoverflow.com/questions/3826136

  •  26-09-2019
  •  | 
  •  

Frage

Ich baue ein Mini-CMS für meine lokalen Wohltätigkeits (ja, ich weiß, dass ich ein Seide Projekt verwenden könnte, aber sie wollen benutzerdefinierte codiert)

Mein propel Schema sieht zur Zeit als solche: -

<?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>

Ich möchte eine Liste zu bekommen, um in der Lage, die „home_page“ umfassen würde und „static_page.“ - ohne diese manuell erstellen zu müssen, wenn ich eine neue Seite Typ hinzufügen

Gibt es eine einfache Möglichkeit, eine Liste wie diese zu erhalten, oder muss ich mit Reflection Klassen einige magische Sachen schreiben, etc?

War es hilfreich?

Lösung

Nach einem Stoß in der richtigen Richtung von #propel auf freenode - Ich habe für ein Grundkonzept mit diesem komme - nicht getestet es noch, obwohl

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top