0

私は関係 manyToMany を持つ「Post」エンティティを持っています

 /**
 * @ORM\ManyToMany(targetEntity="Core\CoreBundle\Entity\User", cascade={"persist", "remove", "merge"})
 * @ORM\JoinTable(name="blogregion_post_views")
 */
protected $views;

 /**
 * @ORM\ManyToMany(targetEntity="Application\BlogRegionBundle\Entity\PostTag", cascade={"persist", "remove", "merge"})
 * @ORM\JoinTable(name="blogregion_tags_match")
 */
protected $tags;

そして、新しい投稿を取得したい

    $query = $this->getEm()->createQuery("
        SELECT p FROM BlogRegionBundle:Post p LEFT JOIN p.tags t LEFT JOIN p.views v
        WHERE t.id = :blogId AND p.state = :state AND p.deleted = 0 AND (v <> :user OR v IS NULL )

    ")
        ->setParameter('blogId', $blogId)
        ->setParameter('state', 1)
        ->setParameter('user', $this->getUser())
    ;

ただし、ユーザーが「ビュー」関係に存在する場合、「投稿」を返します

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

条件を使用してみることができMEMBER OFます。

SELECT p FROM BlogRegionBundle:Post p LEFT JOIN p.tags t WHERE t.id = :blogId AND p.state = :state AND p.deleted = 0 AND :user NOT MEMBER OF p.views

http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#dql-select-examplesから

于 2013-06-18T01:40:17.687 に答える