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

时间:2015-11-10 13:51:19

标签: php symfony doctrine-orm entity

我有一个带有实体输入字段的表单,用 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'
    ));
}

问候并谢谢。

1 个答案:

答案 0 :(得分:3)

我没有提供所有产品的选择,而是使用了一些项目建议和ajax / json提供商,限制为~15项。

我们有大约6万种产品,如果选择这么多,它会导致数据库崩溃。

简体版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);
}