我正在建造一个带有> 40k产品的网络商店。这些产品存储在MySQL表中(生成了表格2个控制台和学说2)。
我有一个采购订单系统并创建了一个表格。
[table public_orders]
[table public_order_rows](fk paskure_order_id和fk product_id)
[表产品](产品(RAM模块,很多属性)(FK Brand_ID)
[table product_brands]
paskureordertype.php
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('customer', 'entity', array(
'class' => 'MyShopBundleCustomerBundleEntityCustomer',
'multiple' => false
))
->add('purchaseOrderStatus', 'entity', array(
'class' => 'AppBundleEntityPurchaseOrderStatus',
'multiple' => false
))
->add('date')
->add('reference')
->add('comments')
->add('purchaseOrderRows', 'collection', [
'type' => new PurchaseOrderRowType(),
'allow_add' => true,
'by_reference' => false,
])
;
}
paskureordorrowtype
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('purchaseOrder', 'entity', array(
'class' => 'AppBundleBundleOrderBundleEntityPurchaseOrder',
'multiple' => false
))
->add('ram', 'entity', array(
'class' => 'MyShopBundleProductBundleEntityRam',
'multiple' => false,
))
->add('purchaseOrderRowStatus', 'entity', array(
'class' => 'AppBundleEntityPurchaseOrderRowStatus',
'multiple' => false
))
->add('description')
->add('count')
->add('startDate')
->add('endDate')
->add('amount')
->add('taxAmount')
->add('discountAmount')
;
}
当我使用学说生成表单时,它会从产品表中加载所有行,从而导致非常缓慢/不可负载的网页。我如何不预先加载所有这些产品?每种产品都有一个唯一的条形码,用户和数据库已知。用户只需要输入条形码,而不是从下拉列表中选择产品。
我一直在尝试将键query_builder添加到 -> add('ram','实体',但这并没有导致解决方案,我被卡住了...
还添加新的采购订单费用超过30秒!我怀疑这个问题也导致了这一点。
任何帮助都将不胜感激。
我可以看到的一种解决方案是创建一个DataTransformer,该dataTransFormer将条形码转换为产品实体和V.V.这是您几乎可以更改并使用它的几乎准备好的示例,您可以选择地将一些jQuery插件(例如自动完成)添加到该TextField。
我们也有类似的问题,这是我们提出的解决方案:
您应该考虑创建最终类 productforchoice,EntityManager作为依赖项,单个 Invoke 方法:
/**
* Class ProductForChoice
*/
final class ProductForChoice
{
/** @var EntityManager */
protected $entityManager;
function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function invoke()
{
$dql = "
SELECT product.id, product.barCode as bar_code
FROM Entity/Product as product
";
$query = $this->entityManager->createQuery($dql);
$results = $query->useResultCache(true, 300)->getArrayResult();
$ret = [];
foreach ($results as $result) {
$ret[$result['id']] = $result['bar_code'];
}
return $ret;
}
}
然后在确保将此类注册为服务之后,您可以以这种方式在抽象类型中使用它:
->add('product', 'filter_choice', [
'required' => false,
'choices' => $this->ProductForChoiceAsService->invoke(),
'label' => 'Products',
]);
请注意,在此示例中,存在 filter_choice ,而不是 Entity 。
。作为附带说明,如果要保留抽象类型,依赖性 - 清洁您可能需要通过 product forforchoiceasservice 在表单选项中,而不是使用__constructor,您的呼叫。
更多地帮助用户在任务中考虑采用选择,这是将多选为搜索输入箱变成类似搜索的输入箱的非常汉字的工具。
希望它有帮助,问候。