Извлечение связанных объектов - PullRequest
0 голосов
/ 22 февраля 2012

В книге 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 ]

1 голос
/ 22 февраля 2012

Это поможет:

$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

0 голосов
/ 22 февраля 2012

Вы можете перебирать продукты и получать оттуда категории.Настройка режима выборки для отношений может помочь уменьшить количество выполняемых запросов.

Однако вы также можете просто написать собственный запрос DQL, чтобы получить то, что вам нужно.Это может выглядеть примерно так:

SELECT p, c
FROM AcmeStoreBundle:Product p
INNER JOIN p.category c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...