Php Symfony表格大数据集

Php Symfony表格大数据集,php,forms,symfony,symfony4,Php,Forms,Symfony,Symfony4,对于Symfony 4项目,我们需要制作一个关于曲面的大型输入表单,其中包含许多字段。我们正在寻找如何组织结构和关系并将加载速度牢记在心的方法 我已经创建了下面的基本实体示例,它仍然可以简单地存储在一个数据库表中。下面的字段是简单的关系或字符串字段,因此InspectionType很容易 class Inspection { /** @var string */ protected $projectName; /** @var string */ protect

对于Symfony 4项目,我们需要制作一个关于
曲面的大型
输入
表单,其中包含许多字段。我们正在寻找如何组织结构和关系并将加载速度牢记在心的方法

我已经创建了下面的基本实体示例,它仍然可以简单地存储在一个数据库表中。下面的字段是简单的关系或字符串字段,因此InspectionType很容易

class Inspection
{
    /** @var string */
    protected $projectName;

    /** @var string */
    protected $projectPlace;

    /** @var User */
    protected $inpector;

    /** @var Customer */
    protected $customer;

    /** @var string */
    protected $conclusion;

    /** @var string */
    protected $advice;

    // Complex part
    
    /** @var Collection */
    protected $surfaces;
}
现在来看复杂的部分。 每次检查可以包含一个或多个表面(ArrayCollection)。 每个曲面由不同的字段组成,请参见以下内容:

  • 屋顶表面(4个字段)
  • 文本类型
  • 选择类型(单个)
  • 选择类型(多个)
  • 日期类型
    • 泄漏(3个字段)
  • 文本类型
  • 图像(关系、一家公司)
  • 选择类型(单个)
    • 张力(3个字段)
    • 坡度(3个字段)
    • 屋顶污染(3个领域)
    • 伤害(5个字段)
    • 镇流器(3个字段)
    • 屋檐(3个字段)
    • 垂直作业(4个字段)
    • 扩展(5个字段)
    • 烟囱(3个字段)
    • 分路箱(3个字段)
    • 。。。9人以上
    我的问题是如何设置
    曲面
    和数据库结构,曲面中的每个零件是否都有其与检查相关的如下表(这将创建许多表,这是否很糟糕?)

    • 表输入
    • 表INPICTION_泄漏
    • 表INPICTION\U张力
    我正在考虑创建一个嵌入集合表单,如下所示

    class InspectionType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            // ...
    
            $builder->add('surfaces', CollectionType::class, [
                'entry_type' => SurfaceType::class,
                'entry_options' => ['label' => false],
            ]);
        }
    }
    
    class SurfaceType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->add('leakage', LeakageTyoe::class);
            $builder->add('tension', Tension::class);
            $builder->add('slope', Slope::class);
            ...
        }
    }
    

    是这样的吗:)要走

    我建议对曲面实体使用一个
    单表策略。这为您提供了所需的速度和灵活性。

    当一些孩子有自己的字段时,这种方法是否不会创建很多列。因为每个表(泄漏、张力)并没有所有相同的字段,请参见上面在codeCould类表继承中更新的,be a options单个表确实会创建更多的列,但这没关系。加载
    泄漏
    实体时,它将仅使用泄漏所需的字段,张力所需的字段也是如此。类表继承实际上也是一种选择。它基本上与单表继承做相同的事情。但是,请注意,当您有许多记录时,您可能会体验到较慢的性能。这就是我建议单表策略的原因。表继承是否为每个曲面创建一个表(
    泄漏
    张力
    )。同样的字段(继承)呢。我应该只将这些字段放在childs中的父字段和子字段中吗?我倾向于对表继承进行分类,因为它描述如下:这种映射策略在设计时提供了最大的灵活性,因为对任何类型的更改总是限于该类型的专用表。以后可以打开吗?。图像呢。这是一个新的关系,所以需要一个新表?是的,类表继承(CTI)为每个曲面创建一个表。对于单表,重叠字段应该放在父表中,而CTI则放在它自己的类中。试一下,看看什么最适合你。至于以后切换到单表:是的,这是可能的。但是,您需要手动编写迁移来完成此操作。如果您想添加图像,我想您需要一个新的实体,因此将创建一个新表。将其与曲面关联应该不是问题。