- Published on
doctrine教程5---JOIN
原创文章,转载时需取得本人同意并注明来源
- Authors
-
-
- Name
- langziyang
-
有时候我们还需要同时搜索FortuneCookie里的内容,那我们就需要用JOIN来进行连接
在Category.php中我们有一个OneToMany的关系,即每一个Category都可以对应多个FortuneCookie,相反的每一个FortuneCookie都会对应一个Category
与sql不同,QueryBuilder 不关心您执行操作的顺序,添加 ->leftJoin() ,因为我们将从一个Category加入到多个Cookie。依次传递 category.fortuneCookies 和 fortuneCookie ,这将是连接实体的别名。
public function search(string $term)
{
$qb = $this->createQueryBuilder('category')
->leftJoin('category.fortuneCookies', 'fortuneCookie')
->andWhere('category.name LIKE :searchTerm OR category.iconKey LIKE :searchTerm OR fortuneCookie.fortune LIKE :searchTerm')
->setParameter('searchTerm', '%' . $term . '%');
$query = $qb->getQuery();
return $query->getResult();
}
因为我们在Category.php里有OneToMany注解,所以我们不需要写ON fortune_cookie.category_id = category.id并且第一个参数可以直接写'category.fortuneCookies',因为fortuneCookies是Category中的一个属性 我们的代码完成了,并且完全没有问题