【问题标题】:Doctrine: Get all children of a many-to-many relation教义:获取多对多关系的所有孩子
【发布时间】:2012-04-08 22:10:14
【问题描述】:

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

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;
}

【问题讨论】:

  • 您需要的是一个“存在”查询,但如果没有详细信息,就很难说出更具体的内容,例如教义版本以及表格结构和关联。

标签: php sql symfony doctrine


【解决方案1】:

如果你只想用一个标签搜索,试试这个:

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

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

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

【讨论】:

  • 太棒了!像魅力一样工作:)
猜你喜欢
  • 2015-11-30
  • 2011-10-09
  • 2021-11-14
  • 1970-01-01
  • 2015-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
相关资源
最近更新 更多