gpt4 book ai didi

php - Symfony2 表单类型实体无预加载

转载 作者:行者123 更新时间:2023-11-29 06:27:07 24 4
gpt4 key购买 nike

我正在建立一个拥有超过 4 万种产品的网上商店。这些产品存储在 MySQL 表中(表是 Symfony 2 控制台和 Doctrine 2 生成的)。

我有一个采购订单系统并创建了一个表格。

[表 purchase_orders]

[表 purchase_order_rows](fk purchase_order_id 和 fk product_id)

[table products](products(很多属性的RAM模块)(fk brand_id)

[表 product_brands]

PurchaseOrderType.php

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('customer', 'entity', array(
'class' => 'MyShop\Bundle\CustomerBundle\Entity\Customer',
'multiple' => false
))
->add('purchaseOrderStatus', 'entity', array(
'class' => 'AppBundle\Entity\PurchaseOrderStatus',
'multiple' => false
))
->add('date')
->add('reference')
->add('comments')
->add('purchaseOrderRows', 'collection', [
'type' => new PurchaseOrderRowType(),
'allow_add' => true,
'by_reference' => false,
])
;
}

PurchaseOrderRowType

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('purchaseOrder', 'entity', array(
'class' => 'AppBundle\Bundle\OrderBundle\Entity\PurchaseOrder',
'multiple' => false
))
->add('ram', 'entity', array(
'class' => 'MyShop\Bundle\ProductBundle\Entity\Ram',
'multiple' => false,
))
->add('purchaseOrderRowStatus', 'entity', array(
'class' => 'AppBundle\Entity\PurchaseOrderRowStatus',
'multiple' => false
))
->add('description')
->add('count')
->add('startDate')
->add('endDate')
->add('amount')
->add('taxAmount')
->add('discountAmount')
;
}

当我使用 Doctrine 生成表单时,它会加载产品表中的所有行,这会导致网页速度非常慢/无法加载。我怎样才能设法不预加载所有这些产品?每个产品都有一个唯一的条形码,用户和数据库都知道该条形码。用户只需输入条形码,无需从下拉列表中选择产品。

我一直在尝试将键 query_builder 添加到 ->add('ram', 'entity' 但这并没有导致解决方案,我卡住了......

另外添加一个新的采购订单需要 30 多秒的时间!我怀疑这个问题也是造成这种情况的原因。

如有任何帮助,我们将不胜感激。

最佳答案

我能看到的一个解决方案是创建一个 DataTransformer将条形码转换为产品实体和 v.v. Here是几乎准备好的示例,您可以稍作更改并使用它,您可以选择向该文本字段添加一些 jquery 插件(例如自动完成)以获得更多可用性。

关于php - Symfony2 表单类型实体无预加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30308290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com