ميراث العقيدة. هل هناك طريقة سهلة للحصول على جميع فئات/جداول الأطفال لاستخدامها في حقل تحديد في نماذج Symfony؟

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

سؤال

لقد بدأت للتو في استخدام 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');

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top