Symfony / Doctrine:计算OneToMany时无效的PathExpression

时间:2017-05-05 11:31:07

标签: php symfony doctrine

我有一个产品实体,我想获得所有提供产品的产品。 productHasImagesProductImages

之间的OneToMany关系
/**
     * @ORM\OneToMany(targetEntity="ProductHasImage", mappedBy="product", cascade={"persist"}))
     * @ORM\OrderBy({"sorting" = "ASC"})
     */
    private $productHasImages;

所以我在Form-Entity中使用以下选项设置了querybuilder:

....
    ->add('product', EntityType::class, array(
                        'class' => 'AppBundle\Entity\Product',
                        'multiple' => false,
                        'expanded' => false,
                        'label' => 'product',
                        'translation_domain' => 'product',
                        'query_builder' => function (EntityRepository $er) use ($portal) {
                            return $er->createQueryBuilder('p')
                                ->select('p')
                                ->addSelect('COUNT(p.productHasImages) AS productHasImagesCount')
                                ->having('productHasImagesCount > 1');
                        }
                    ))

没有Count Query,我得到所有的参与者,但有了它,我得到一个错误:

[Semantical Error] line 0, col 18 near 'productHasImages)': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.

有人可以帮我吗?谢谢!

1 个答案:

答案 0 :(得分:0)

你应该这样做

                    'query_builder' => function (EntityRepository $er) {
                        return $er->createQueryBuilder('p')
                            ->where('SIZE(p.productHasImages)>0');
                    }

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#dql-functions

" SIZE(collection) - 返回指定集合中的元素数量"