0

我似乎无法弄清楚这一点,尽管它应该是相当简单的事情。

我有图像实体和文章实体。许多文章可以使用相同的图像,但每篇文章只能有一个图像,因此它们被映射为 OneToMany<->ManyToOne。

现在,我只需要选择没有任何相关文章的图像。我该怎么做呢?

我试过:

$repository->createQueryBuilder('i')
->select('i')
->where('count(i.articles) = NULL');

但它不起作用。我怎样才能做到这一点?

更新

我在 Type 类中使用它,并试图创建仅包含未使用实体的实体字段,如果相关,这里是完整的功能代码:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('images', 'entity', array(
                'class' => 'BloggerBlogBundle:Image',
                'query_builder' =>
                    function(EntityRepository $er)
                    {
                        return $er->createQueryBuilder('i')->.........here goes query creation

                                                    },
            )
        )
        ;
}

如果需要,这里也是关联:

图像类:

/**
 * @ORM\OneToMany(targetEntity="Blog", mappedBy="image")
 */
protected $articles;

博客类:

/**
 * @ORM\ManyToOne(targetEntity="Image", inversedBy="articles")
 */
protected $image;
4

3 回答 3

4

试试这个:

$qb->createQueryBuilder();
->select('i');
->from('BloggerBlogBundle:Image', 'i')
->leftJoin('i.articles', 'a')
->where('a is NULL');
于 2012-12-14T01:52:53.417 回答
1

您不应该在那里使用该count()功能,并且... = NULL需要更改为... is NULL以便 Doctrine 完成其工作。

全部的:

$repository->createQueryBuilder('i')
    ->select('i')
    ->where('i.articles is NULL');
于 2012-12-14T01:50:40.080 回答
0

接受的答案不再有效 - 您必须添加.id到 where 表达式:

$qb->createQueryBuilder();
 ->select('i');
 ->from('BloggerBlogBundle:Image', 'i')
 ->leftJoin('i.articles', 'a')
 ->where('a.id is NULL');

取自 https://stackoverflow.com/a/30034662/1358376

于 2015-10-26T17:14:48.163 回答