doctrine教程5---JOIN

Mario Sanchez

16 people read
Thumbnail

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

About Me

我是一位精通 Symfony 框架和 API Platform 的开发者,擅长构建高效、可扩展的 Web 应用程序和 API。 此外,我还具备 PrestaShop 模块开发经验,能够为您的电商平台定制功能,满足特定业务需求。