1

我需要一个 DQL 查询,它将返回所有posts给定的tag.

posts并且tags有一个多对多的关系,给定一个 tag.slug 我应该能够获得与该标签相关的所有帖子,但是如何?

更新:

我将 Doctrine 2.1 与 Symfony 2 一起使用,我的实体如下所示:

/**
 * @ORM\Entity
 * @ORM\Table(name="articles__posts")
 */
class ArticlePost
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToMany(targetEntity="ArticleTag", inversedBy="posts")
     * @ORM\JoinTable(name="articles__posts_tags")
     */
    protected $tags;
}

/**
 * @ORM\Entity
 * @ORM\Table(name="articles__tags")
 * @UniqueEntity(fields="slug")
 */
class ArticleTag
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToMany(targetEntity="ArticlePost", mappedBy="tags")
     */
    protected $posts;
}
4

1 回答 1

1

如果您只想使用一个标签进行搜索,请尝试以下操作:

SELECT post FROM ArticlePost post
JOIN post.tags tag
WHERE tag.slug = {$tagSlug}

如果要搜索多个标签,只需将条件更改为:

... WHERE tag.slug IN ( {$slug1}, {$slug2}, ... {$slugN} )
于 2012-04-09T10:50:42.267 回答