0

かなり単純なことなのに、これがわからないようです。

ImageエンティティとArticleエンティティがあります。同じ画像を多くの記事で使用できますが、各記事は1つの画像しか持てないため、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()そこでは関数を使用すべきではなく、Doctrine がその仕事を行うために... = NULL変更する必要があります。... is NULL

合計:

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