通过许多结果提高实体输入性能 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);
}
我有一个带有 实体输入字段 的表单,它加载了可部署的 (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);
}