ميراث العقيدة. هل هناك طريقة سهلة للحصول على جميع فئات/جداول الأطفال لاستخدامها في حقل تحديد في نماذج Symfony؟
-
23-09-2019 - |
سؤال
لقد بدأت للتو في استخدام Symfony 1.4 والعقيدة. (يستخدم 1.0 - 1.2 + دفع الكثير من قبل).
فكرت في تجربة العقيدة ، بسبب عملية التطوير السريعة والضخمة في الماضي.
بفضل jwage ؛-)
أنا باستخدام ميراث الجدول. هذا جزء صغير من مخططاتي.
Articles:
columns:
id:
type: integer(4)
primary: true
notnull: true
autoincrement: true
marken_id:
type: integer(4)
notnull: false
user_id:
type: integer(4)
notnull: false
address_id:
type: integer(4)
notnull: false
...
Vehicles:
inheritance:
extends: Articles
type: concrete
Rennfahrzeuge:
columns:
stvo:
type: boolean
notnull: false
default: false
inheritance:
extends: Vehicles
type: concrete
Tourenwagen:
inheritance:
extends: Rennfahrzeuge
type: column_aggregation
keyField: type
keyValue: 1
...
Sonstige:
inheritance:
extends: Rennfahrzeuge
type: column_aggregation
keyField: type
keyValue: 6
Karts:
inheritance:
extends: Vehicles
type: concrete
TonyKart:
inheritance:
extends: Karts
type: column_aggregation
keyField: type
keyValue: 1
...
Sonstige:
inheritance:
extends: Karts
type: column_aggregation
keyField: type
keyValue: 9
أنا الآن أفكر في استخدام طريقة بسيطة لإنشاء النموذج الصحيح.
يجب أن يتعين على المستخدم تحديد الحقول في الجزء العلوي من النموذج (كما يمكنك أن ترى هنا: http://msm-esv.dyndns.org/frontend_dev.php/fahrzeuge/insert )
يجب عليك اختيار "فئة الوالدين" مثل Rennfahrzeuge أو Karts وما إلى ذلك.
بعد ذلك ، يجب على المستخدم اختيار فئة الطفل مثل Tourenwagen أو Sonstige.
ثم يجب إعادة تحميل الصفحة وعرض النموذج الصحيح.
هل هناك أي وظيفة في العقيدة للحصول على فصول الموروث/الطفل لعرضها في حقل SELECT الثاني؟
(على سبيل المثال Rennfahrzeuge لديه Tourenwagen ، .. ، ... ، Sonstige و Karts له Tonykart ، ... ، ... ، Sonstige)
بعد ذلك ، يمكنني إنشاء فئة النموذج المعينة بشكل ديناميكي مثل:
$chooseMode = $request->getParameter('chooseMode').'Form';
$modeFormClass = new $chooseMode();
أو لقد فكرت في مجرد تعيين النموذج الصحيح في فئة النموذج الأصل.
ما رأيك؟ سأقدر حقًا أي اقتراحات ومساعدة :-)
شكرًا جزيلاً،
ماركو
المحلول
هل هناك وظائف مباشرة مثل العقيدة getSubclasses
أو PHP get_children_of
؟ ليس هذا قد صادفت ، في العقيدة أو PHP. الأقرب الذي أعرفه هو وظيفة PHP is_subclass والتي يمكنك استخدامها أثناء التكرار من خلال جميع فصولك الممكنة.
هل فئاتك الفرعية تختلف اختلافًا كبيرًا من نموذجك الرئيسي؟ أرى فقط تباين عمود واحد في أمثلةك أعلاه ولكني أعتقد أن هذا كان مجرد الإيجاز.
أدرك جاذبية الهيكل الذي تحاوله ، لكن يبدو أنه قد يكون ألمًا لا يصدق على المدى الطويل. هل سيكون من الممكن بدلاً من ذلك إعداد منفصلة VehicleCategory
النموذج الذي أشار إلى نفسه لتوفير بنية متداخلة ثم Vehicles
هل يمكن أن تنتمي إلى تلك الفئات؟ هذا سيكون Rennfahrzeuge كفئة المستوى الأعلى و Tourenwagen و Sonstige ستكون فئات مع أحد الوالدين Rennfahrzeuge مع Vehicles
ينتمي إلى الثلاثة. إذا لم يكن لديك الكثير من التباين الميداني في نماذج طفلك ، فيمكنك تضمين جميع الحقول المخصصة في Vehicles
نموذج وعرضها/تعيينها فقط في الأوقات المناسبة.
فقط بعض الأفكار ، أتمنى أن يساعد ذلك.
نصائح أخرى
إذا كنت بحاجة إلى العثور على الفئات الفرعية لسجل عقيدة يمكنك استخدامها
$yourSuperObject->getTable()->getOption('subclasses')
أو
Doctrine::getTable('SuperClass')->getOption('subclasses');