Published on

doctrine教程5---JOIN

原创文章,转载时需取得本人同意并注明来源
Authors
  • doctrine教程5---JOIN
    Name
    langziyang
    Twitter

有时候我们还需要同时搜索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中的一个属性 我们的代码完成了,并且完全没有问题