学说的继承。有没有一种简单的方法来获取所有子类/表在symfony的形式使用它们在选择字段?

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

我刚开始使用symfony的1.4和学说。 ( - 前1.2 +行走了许多使用1.0)。

我想给学说一试,因为快速和巨大 在过去的发展过程。

由于jwage ;-)

im使用表继承。这是我的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。

然后,页面应该重新加载并显示正确的形式。

是否有任何学说函数来获取在继承/子类 在第二选择栏显示它们?

(例如Rennfahrzeuge具有Tourenwagen,...,...,和SONSTIGE卡丁车具有 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