@florian 给了你正确的答案,但让我试着用例子来解释一下:
在 sql 中,连接是这样完成的:
SELECT * FROM category
LEFT JOIN product ON product.category_id = category.id
(或类似的东西)
现在在 Doctrine 中,您不需要使用ON
子句,因为教义从实体中的关系注释中知道这一点。所以上面的例子是:
// CategoryRepository.php
public function getCategoriesAndJoinProducts()
{
return $this->createQueryBuilder("o")
->leftJoin("o.products", "p")->addSelect("p")
->getQuery()->getResult() ;
}
两者都将获取所有类别并加入与它们相关的产品。
现在是WITH
条款。如果您只想加入价格大于 50 的产品,您可以在 SQL 中执行此操作:
SELECT * FROM category
LEFT JOIN product ON product.category_id = category.id AND product.price>50
在教义中:
// CategoryRepository.php
public function getCategoriesAndJoinProductsWithPriceBiggerThan($price)
{
return $this->createQueryBuilder("o")
->leftJoin("o.products", "p", "WITH", "p.price>:price")
->setParameter("price", price)->addSelect("p")
->getQuery()->getResult() ;
}
ON
因此,实际上,如果您正在使用 Doctrine ,则永远不应该使用。如果你需要这样的东西,你几乎可以肯定你搞砸了别的东西。