Reputation: 97
I'm trying to create fulltext search in Doctrine Query Builder. But I have here one problem.
In Post Entity I have this:
/**
* @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;
And I'm searching in post with this code:
$searched = $this->em->createQueryBuilder();
$searched->select('p')
->from(Post::getClassName(), 'p');
$searched->where(
$searched->expr()->like('p.title', $searched->expr()->literal('%' . $values->search . '%'))
);
But now I don't know how to search in "tags" because it's collection. Can somebody put me on right journey? Thank you very much.
Upvotes: 1
Views: 2656
Reputation: 13127
Try an inner join:
$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();
Some variable names are made up, as I don't know your exact schema, but this should get you going.
Upvotes: 2