1

symfony 1.4 と Doctrine を使い始めたところです。(以前は 1.0 - 1.2 + Propel を使用していました)。

過去の開発プロセスが速くて巨大だったので、Doctrine を試してみようと思いました。

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/insert )

Rennfahrzeuge や Karts などの「親クラス」を選択する必要があります。

その後、ユーザーは Tourenwagen や Sonstige などの子クラスを選択する必要があります。

次に、ページがリロードされ、正しいフォームが表示されます。

2番目の選択フィールドに表示するための継承/子クラスを取得するDoctrineの関数はありますか?

(例: Rennfahrzeuge には Tourenwagen、...、...、Sonstige があり、Karts には TonyKart、...、...、Sonstige があります)

その後、次のような割り当てられたフォーム クラスを動的に作成できます。

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

または、親フォーム クラスに適切なモデルを設定することだけを考えました。

あなたの考えは何ですか?提案や助けをいただければ幸いです:-)

どうもありがとう、

マルコ

4

2 に答える 2

1

Doctrine Recordのサブクラスを見つける必要がある場合は、
$yourSuperObject->getTable()->getOption('subclasses')または
Doctrine::getTable('SuperClass')->getOption('subclasses');

于 2010-05-20T14:42:59.870 に答える
0

getSubclassesDoctrineや PHPなどの直接関数はありますget_children_ofか? Doctrine や PHP で出会ったわけではありません。私が知っている最も近いものは、可能なすべてのクラスを反復処理するときに使用できるPHP 関数is_subclassです。

サブクラスはメイン モデルと大きく異なりますか? 上記の例には1つの列のバリエーションしかありませんが、それは簡潔にするためだけだったと思います.

あなたが試みている構造の魅力は理解していますが、長期的には信じられないほどの苦痛になる可能性もあるようです. VehicleCategory代わりに、ネストされた構造を提供するためにそれ自体を参照する別のモデルをセットアップして、Vehiclesそれらのカテゴリに属する​​ことができるでしょうか? これは最上位カテゴリとしてRennfahrzeugeを持ち、 TourenwagenSonstigeは、3 つすべてに属するRennfahrzeugeの親を持つカテゴリになります。Vehicles子モデルにフィールドのバリエーションがあまりない場合は、すべてのカスタム フィールドをVehiclesモデルに含めて、適切なタイミングでのみ表示/設定することができます。

ほんの少しの考えですが、お役に立てば幸いです。

于 2010-03-03T22:51:25.053 に答える