代码之家  ›  专栏  ›  技术社区  ›  Stphane

Symfony-在EntityType querybuilder的水合过程中丢弃关联字段

  •  0
  • Stphane  · 技术社区  · 7 年前

    My Symfony(3.3)表单EntityType显示为选择输入,并列出数据库中的所有客户端。客户端实体使用延迟模式与其他几个实体相关联。
    渲染选择框时,发出204 DB查询。我怀疑表单组件会针对每个查询结果调用setter,从而导致加载许多额外的数据库查询。


    那么,这种用例的实现方式是什么?

    以下是我迄今为止尝试的内容:

        $builder->add('parent', EntityType::class, [
            'class' => Client::class,
            ,'required' => false
            ,'multiple' => false
            ,'query_builder' => function (EntityRepository $er) {
                $qb = $er ->createQueryBuilder('c')
                // All I want doctrine to fetch are the following fields
                    ->select('PARTIAL c.{id,uuid,name,shortName}');
                // I expected this flag to help but it does not change the total amount of queries executed
                $qb->getQuery()->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true);
                return $qb;
            }
        ])…
    

    1 回复  |  直到 7 年前
        1
  •  0
  •   Stphane    7 年前

    解决了的

    其中一个关联是oneToOne,是唯一将其映射“fetch”键设置为' 急切的 '.
    我希望在使用默认EntityType的QueryBuilder时,Doctrine会自动加入并选择这样的关联,但事实并非如此,我不得不明确地告诉QueryBuilder这样做(再一次,尽管fetch标志设置为“EAGER”)。

        return $qb->select('c, p')->leftJoin('c.param', 'p');