Doctrine Query Builder - 在集合中搜索

时间:2014-09-02 07:49:41

标签: php doctrine-orm doctrine

我试图在Doctrine Query Builder中创建全文搜索。但我有一个问题。

在帖子实体中我有这个

    /**
     * @ORM\Column(type="string")
     */
    protected $title;

    /**
     * @ORM\ManyToMany(targetEntity="Tag", inversedBy="posts")
     * @ORM\JoinTable(
     *     name="posts_tags",
     *     joinColumns={
     *         @ORM\JoinColumn(name="post_id", referencedColumnName="id")
     *     },
     *     inverseJoinColumns={
     *         @ORM\JoinColumn(name="tag_id", referencedColumnName="id")
     *     }
     * )
     */
    protected $tags;

我正在使用此代码搜索帖子:

$searched = $this->em->createQueryBuilder();

$searched->select('p')
         ->from(Post::getClassName(), 'p');

$searched->where(
               $searched->expr()->like('p.title', $searched->expr()->literal('%' . $values->search . '%'))
            );

但现在我不知道如何搜索"标签"因为它的收藏。有人可以让我走上正确的旅程吗?非常感谢你。

1 个答案:

答案 0 :(得分:0)

尝试内部联接:

$qb = $em->createQueryBuilder();
$posts = $qb->select('p')
    ->from(Post::getClassName(), 'p')
    ->innerJoin('p.tags', 't')
    ->where($qb->expr()->like('p.title', ':postTitle'))
    ->andWhere('t.name = :tagName')
    ->setParameter("postTitle", "%{$values->search}%")
    ->setParameter("tagName", "foobar")
    ->getQuery()->getResult();

由于我不知道您的确切架构,因此编制了一些变量名称,但这应该可以帮助您。