Vra

Ek is die bou van 'n mini-CMS vir my plaaslike liefdadigheid (ja, ek weet ek kan 'n floss projek gebruik, maar hulle wil persoonlike gekodeerde)

My PROPEL skedule tans lyk soos: -

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

Ek wil in staat wees om 'n lys wat sal insluit "home_page" en "static_page" kry -. Sonder om te hierdie hand te skep wanneer ek 'n nuwe bladsy tipe voeg

Is daar 'n maklike manier om 'n lys soos hierdie te kry, of moet ek 'n paar magic stuff met Refleksie Klasse, ens?

skryf
Was dit nuttig?

Oplossing

Na 'n sak in die regte rigting van #propel op Free Node - Ek het vorendag gekom met hierdie vir 'n basis konsep - dit nog nie getoets al

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;
}
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top