Doctrineの継承。 symfonyのフォームで選択フィールドでそれらを使用するためのすべての子クラス/テーブルを取得する簡単な方法はありますか?

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

質問

私はただのsymfony 1.4とDoctrineを使用し始めました。 ( - の前に1.2 + Propelの多くの1.0を使用します)。

私はので、高速かつ巨大で、教義を試してみることにしと思いました 過去に開発プロセス。

jwage ;-)

のおかげで

イムテーブル継承を使用します。これは私のschema.ymlのごく一部です。

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 /挿入する

あなたはRennfahrzeugeやゴーカートなど「親クラス」を選択する必要があります 上のようにします。

ユーザーがTourenwagenなど子クラスを選択するべきであるとした後、

Sonstige。

次に、ページをリロードすると、右のフォームが表示されます。

inheritated /子クラスを取得するための教義のいずれかの機能があります 第2の選択フィールドでそれらを表示するための?

(例えば。RennfahrzeugeありTourenwagen、...、...、Sonstigeやゴーカートがあり TonyKart、...、...、Sonstige)

私は、割り当てられたフォームクラスのように動的に作成することができた後、

$chooseMode      = $request->getParameter('chooseMode').'Form'; 
$modeFormClass   = new $chooseMode(); 

または私はちょうど親に右モデルを設定することについて考えています フォームクラス。

あなたの考えは何ですか?私は本当に任意の提案をいただければ幸いですし、 ヘルプ:-)

どうもありがとう、

マルコ

役に立ちましたか?

解決

などDoctrineのgetSubclassesやPHPのget_children_ofなどの直接の機能はありますか?私は教義やPHPで、全体で来ていないということ。私が知っている最も近いPHP関数 is_subclass のですこれはあなたが可能なクラスの全てを反復しながら、使用することができます。

あなたのサブクラスでは、あなたのメインモデルから大幅に異なるのですか?私は上記のあなたの例では1つの列の変化を見るだけでなく、私はそれがちょうど簡潔にするためだった推測してます。

私はあなたがしようとしている構造の魅力を実現するが、それは長期的には信じられないほどの痛みをすることができようにそれもそうです。代わりに、ネストされた構造を提供するために、自分自身を参照して、あなたのVehicleCategoryは、これらのカテゴリに属していることができることを別のVehiclesモデルを設定することは可能でしょうか?これは、トップレベルカテゴリとしてのRennfahrzeuge のを持っているとのTourenwagen Sonstige のRennfahrzeuge のの親を持つカテゴリのだろうと考えすべての3つに属するVehicles。あなたの子供のモデルにあまりにも多くのフィールドの変化を持っていなかった場合は、適切な時にそれらを設定/ Vehiclesモデルとだけ表示にカスタムフィールドのすべてを含めることができます。

ただ、いくつかの考え、お役に立てば幸いです。

他のヒント

あなたが教義のレコードのサブクラスを見つける必要がある場合は、

あなたは
を使用することができます $yourSuperObject->getTable()->getOption('subclasses')または
Doctrine::getTable('SuperClass')->getOption('subclasses');

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top