Comment puis-je trouver une liste des sous-classes pour un modèle de Propel avec l'héritage concret

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

  •  26-09-2019
  •  | 
  •  

Question

Je construis un mini-cm pour mon organisme de bienfaisance local (oui, je sais que je pourrais utiliser un projet fil, mais ils veulent codé sur mesure)

Mon schéma de Propel semble actuellement en tant que tel: -

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

Je veux être en mesure d'obtenir une liste qui comprendrait « home_page » et « static_page. » - sans avoir à créer manuellement chaque fois que j'ajouter un nouveau type de page

Y at-il un moyen facile d'obtenir une liste comme ça, ou dois-je écrire des trucs de magie avec des classes de réflexion, etc?

Était-ce utile?

La solution

Après un coup de coude dans la bonne direction de #propel sur freenode - Je suis venu avec cela pour un concept de base - ne l'ont pas encore testé si

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top