学说:让所有孩子成为多对多的关系

时间:2012-04-08 22:10:14

标签: php sql symfony doctrine

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

poststags有多对多关系,给定了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;
}

1 个答案:

答案 0 :(得分:1)

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

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

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

... WHERE tag.slug IN ( {$slug1}, {$slug2}, ... {$slugN} )