通过许多结果提高实体输入性能 Symfony2

Improve entity input performance with many results Symfony2

我有一个带有 实体输入字段 的表单,它加载了可部署的 (select - 选项)120000 个结果。渲染这会使页面最多需要 30 秒 来加载。

你知道在 symfony 中处理这种类型的控制表单以减少加载时间的其他方法吗?

形式:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
    ->add('name', 'text')
    ->add('contact', 'text', array(
            'required' => false
    ))
    ->add('address', 'text')
    ->add('id_spanish_town', 'entity', array(
            'class' => 'PanelBundle:SpanishTowns',
            'query_builder' => function(EntityRepository $er){
                return $er->createQueryBuilder('z')
                ->orderBy('z.name', 'asc');
            }
    ))
    ->add('password', 'repeated', array(
            'type' => 'password',
            'first_name' => 'pass',
            'second_name' => 'pass_confirm',
            'mapped' => false,
            'required' => false
    ))
    ->add('email', 'email', array(
            'required' => false
    ))
    ->add('about_us', 'textarea', array(
            'required' => false
    ))
    ->add('save', 'submit', array(
            'label' => 'Save'
    ));
}

您好,谢谢。

我不会提供 select 的所有产品,而是使用一些商品建议和 ajax/json 供应商,限制为 ~15 件商品。

我们有大约 60 000 种产品,如此巨大的 selection 会使数据库崩溃。

简化版的QueryBuilder

// ...

/**
 * @var int
 */
const ITEMS_LIMIT = 15;


public function getDataForResponse($entityName, $name)
{
    $queryBuilder = $this->entityManager->createQueryBuilder()
        ->select('e.id, e.name')
        ->from($entityName, 'e');
        ->where('e.name LIKE :name')
        ->setParameter('name', '%' . $name . '%');

    return $queryBuilder->getQuery()
        ->setMaxResults(self::ITEMS_LIMIT)
        ->getResult(Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY);
}