0

我正在使用 Easy Admin 的FormBuilder. 我的目标是有一个AssociationField代表OneToMany关系的,例如,将多个产品分配给一个商店。另外,我只想列出一些过滤后的产品,所以我覆盖了 中的createEditFormBuilder方法CrudController,我用这个问题作为参考,这是覆盖函数的代码:

    public function createEditFormBuilder(EntityDto $entityDto, KeyValueStore $formOptions, AdminContext $context): FormBuilderInterface
    {
        $formBuilder = parent::createEditFormBuilder($entityDto, $formOptions, $context);

        $filteredProducts = $context->getEntity()->getInstance()->getFilteredProducts();

        $formBuilder->add('products', EntityType::class, ['class' => 'App\Entity\Product', 'choices' => $filteredProducts, 'multiple' => true]);

        return $formBuilder;
    }

我希望关联字段作为configureFields()函数中配置的字段,但是,显示的字段不允许文本搜索或自动完成功能,而且高度不正确。

预期的:

在此处输入图像描述

实际的:

在此处输入图像描述

我试图更改函数中的第二个参数$formBuilder->Add(),但所有特定的 EasyAdmin 类型都会引发错误。

更新:我也尝试使用 EasyAdmin 的CrudFormType而不是EntityType,它不支持 'choice' 参数。不过,结果是一样的。

4

1 回答 1

2

setQueryBuilder现场有,你可以用它来过滤这样的实体

<?php

// ...
public function configureFields(string $pageName): iterable
{
  // ...
  yield new AssociationField::new('products')->setQueryBuilder(function($queryBuilder) {
      $queryBuilder
        ->andWhere('entity.id IN (1,2,3)')
      ;
  })
  ;
  // ...
}
于 2021-08-11T20:02:12.847 回答