كيف أجد قائمة بالفئات الفرعية لنموذج الدفع مع الميراث الملموس
-
26-09-2019 - |
سؤال
أنا أقوم ببناء مصغرة لجمعية الخيرية المحلية (نعم ، أعلم أنه يمكنني استخدام مشروع خيط ، لكنهم يريدون ترميز مخصص)
يبدو مخطط الدفع الخاص بي حاليًا على هذا النحو:-
<?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 على Freenode - لقد توصلت إلى هذا لمفهوم أساسي - لم أختبره بعد رغم ذلك
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;
}
لا تنتمي إلى StackOverflow