在Symfony 2书中,有一个如何为ONE $产品执行此操作的示例:http://symfony.com/doc/2.0/book/doctrine.html#fetching-related-objects
这很简单:
public function showAction($id)
{
$product = $this->getDoctrine()
->getRepository('AcmeStoreBundle:Product')
->find($id);
$categoryName = $product->getCategory()->getName();
// ...
}
但是,如果我想获取所有带有自动加入到每个项目的类别信息的产品呢?
谢谢!
答案 0 :(得分:1)
这样可以解决问题:
$products = $this->getDoctrine()->getRepository('AcmeStoreBundle:Product')->findAll();
但是,每次在产品上执行getCategory时,都会触发sql查询,这可能会导致性能问题。
您真正想要做的是使自己成为ProductManager服务并编写一个连接产品和类别的显式查询。因此,只会生成一个SQL查询。 Doctrine 2手册有很多例子。
http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/query-builder.html
答案 1 :(得分:0)
您可以迭代产品并从那里获取类别。调整关系上的获取模式可能有助于减少执行的查询量。
但是,您也可以编写自定义DQL查询以获得所需内容。它可能看起来像这样:
SELECT p, c
FROM AcmeStoreBundle:Product p
INNER JOIN p.category c