我需要一个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;
}
答案 0 :(得分:1)
如果您只想使用一个标签进行搜索,请尝试以下操作:
SELECT post FROM ArticlePost post
JOIN post.tags tag
WHERE tag.slug = {$tagSlug}
如果要搜索多个标记,只需将条件更改为:
... WHERE tag.slug IN ( {$slug1}, {$slug2}, ... {$slugN} )