symfony - EasyAdmin (v2):按相关实体的属性过滤列表视图
问题描述
我愿意完全实现在 Symfony 上的 EasyAdmin (v.2) 文档中描述的那种列表过滤(自定义动态过滤器),即通过相关实体的属性过滤实体的列表视图(例如,按给定国家的客户)。
由于文档中只有以下代码块,我对如何使用通常的两个选择列表创建自定义 EntityTypeFilter 非常迷茫(相同/不同的列表和可用国家/地区的列表通过客户关联进行订购)。configureOptions()
和getParent()
函数应该是什么?
谢谢 !
# config/packages/easy_admin.yaml
easy_admin:
entities:
Users:
class: App\Entity\Order
list:
filters:
# 'country' doesn't exist as a property of 'Order' so it's
# defined as 'not mapped' to avoid errors
- property: 'country'
type: 'App\Form\Filter\CustomerCountryFilterType'
mapped: false
// App\Form\Filter\CustomerCountryFilterType
// ...
public function filter(QueryBuilder $queryBuilder, FormInterface $form, array $metadata)
{
if (null !== $form->getData()) {
$queryBuilder
->leftJoin('entity.customer', 'customer')
->andWhere('customer.country = :country')
->setParameter('country', $form->getData());
}
}
解决方案
尝试这个:
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'class' => Country::class
]);
}
public function getParent()
{
return EntityType::class;
}
如果要按国家/地区名称排序,可以在选项中添加自定义查询生成器:
use Doctrine\ORM\EntityRepository;
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'class' => Country::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('c')
->orderBy('c.name', 'ASC');
}
]);
}
推荐阅读
- android - 部分覆盖资源
- javascript - 在 JS 正则表达式中重用捕获组模式
- c# - 如何制作可安装的 .Net 控制台应用程序
- javascript - Angular 6 / Typescript 从 Json 对象获取键名
- c# - 输入 getKeyDown 不触发
- r - R数据框中的交叉制表
- c# - 将当前应用程序作为单个实例运行并显示上一个实例
- javascript - 是否可以将 HTML、CSS 和 JavaScript(作为客户端)以及 Node.js 文件(服务器端)部署到 Heroku?
- c# - 从 C# 代码发送 HTTP 请求时挂起
- java - 如果我使用 new 运算符创建实体实例并手动设置其 id(PK) 然后尝试持久化它(调用 EM#persist())会发生什么?