获取相关对象

时间:2012-02-22 17:13:49

标签: doctrine symfony

在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();

// ...
}

但是,如果我想获取所有带有自动加入到每个项目的类别信息的产品呢?

谢谢!

2 个答案:

答案 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