configureListFields 中的 Sonata Admin 自定义查询

Posted

技术标签:

【中文标题】configureListFields 中的 Sonata Admin 自定义查询【英文标题】:Sonata Admin custom query in configureListFields 【发布时间】:2016-01-22 11:07:25 【问题描述】:

我被困了几个小时。

我有管理类来列出所有类别,并且在一个表列中有相关产品(产品实体):Table example 相关代码:

protected function configureListFields(ListMapper $listMapper)

    $listMapper
            ->addIdentifier('name')
            ->add('products') // Entity Product, @ORM\OneToMany
            ->add('ord')
    ;

我需要做的是根据“(布尔)product.active”隐藏非活动产品,但我无法弄清楚。我知道“createQuery”方法,但它不起作用。当我生成 SQL 并直接运行查询时,它可以工作,但在这里看起来我只能使用 ProxyQuery 来过滤类别,然后在单独的查询中查询所有产品(这个单独的查询我不知道如何更改)。

public function createQuery($context = 'list')

    $query = parent::createQuery($context);

    $q = new ProxyQuery($query->join(sprintf('%s.products', $query->getRootAlias()), 'p')
            ->andWhere('p.active = :act')->setParameter('act', true));

    return $q;

感谢您的帮助

【问题讨论】:

【参考方案1】:

您可以将字段的类型更改为 null 或实体并添加 query_builder option 以适应使用的查询:

protected function configureListFields(ListMapper $listMapper)

    $listMapper
        ->addIdentifier('name')
        ->add('products', null, array(
            'query_builder' => function(EntityRepository $er) 
                 return $er->createQueryBuilder('qb')
                           ->leftjoin('qb.products', 'p')
                           ->where('p.active = :act')
                           ->setParameter('act', true)
             
     ));

我没有使用 oneToMany 关系对其进行测试。

这个topic里面有一些信息

【讨论】:

感谢您的回复,但我仍然无法正常工作。看起来“query_builder”不知何故未使用。我试过 put die();在那个函数中,什么也没发生。 确保包含 EntityRepository 的整个路径,而不仅仅是名称:) 它对我来说就像一个魅力

以上是关于configureListFields 中的 Sonata Admin 自定义查询的主要内容,如果未能解决你的问题,请参考以下文章

Symfony:奏鸣曲媒体文件预览

编辑奏鸣曲用户数据

在Android Studio中调用so中的方法

android中怎么手动调用.so库中的游戏,

执行ldconfig命令后报错的解决过程:ldconfig: 目录 /lib 中的 libpng.so 和 libpng15.so.15.13.0 的 so 名称相同但类型不同。

Android 逆向Android 中常用的 so 动态库 ( 拷贝 /system/lib/ 中的 Android 系统 so 动态库 )