Symfony Doctrine Много запросов

golfstream

Новичок
Всем доброго времени суток !

Вывожу данные в шаблон:

Код:
public function showAction(Request $request)

    {
        $em = $this->getDoctrine()->getManager();   

        $session = $request->getSession();
        $cart = $em->getRepository('AppShopBundle:Cart')->findBy(array('user_token' => $session->get('token')));

        return $this->render('cart/index.html.twig', array(
            'cart' => $cart,

        ));
    }

В итоге, например возвращается 4 позиции, и во вкладке Doctrine панели app_dev показывает тоже 4 запроса:

3 0.63 ms
SELECT t0.id AS id_1, t0.name AS name_2, t0.price AS price_3, t0.enabled AS enabled_4, t0.created_at AS created_at_5, t0.category_id AS category_id_6, t0.manufacturer_id AS manufacturer_id_7 FROM product t0 WHERE t0.id = ?
Parameters: [0 => 2]

4 0.78 ms
SELECT t0.id AS id_1, t0.name AS name_2, t0.price AS price_3, t0.enabled AS enabled_4, t0.created_at AS created_at_5, t0.category_id AS category_id_6, t0.manufacturer_id AS manufacturer_id_7 FROM product t0 WHERE t0.id = ?
Parameters: [0 => 3]

5 0.50 ms
SELECT t0.id AS id_1, t0.name AS name_2, t0.price AS price_3, t0.enabled AS enabled_4, t0.created_at AS created_at_5, t0.category_id AS category_id_6, t0.manufacturer_id AS manufacturer_id_7 FROM product t0 WHERE t0.id = ?
Parameters: [0 => 4]

6 0.46 ms
SELECT t0.id AS id_1, t0.name AS name_2, t0.price AS price_3, t0.enabled AS enabled_4, t0.created_at AS created_at_5, t0.category_id AS category_id_6, t0.manufacturer_id AS manufacturer_id_7 FROM product t0 WHERE t0.id = ?
Parameters: [0 => 1]

Если вернется 10 позиций, то будет 10 запросов с разными параметрами id, время соответственно растет тоже.

Почему так происходит, или это нормально?

Спасибо.

P.S Тем, кто читал ранее.. Прошу прощения ошибся.
 
Последнее редактирование:

scorpion-ds

Новичок
$cart - судя по всему список, когда ты в цикле по нему проходишь и обращаешся к дочерним объектам, то делается отдельный запрос для получения данных по этим объектам, исключением является обращение к getId(), тогда запрос не делается.
 

golfstream

Новичок
Как-то странно тогда получается... Я думал, что $cart это результат запроса через doctrine типа SELECT * FROM cart WHERE user_token = $token,
результат которого возвращается в виде массива. и рендерится twig, . Без symfony мне было достаточно сделать mysql_fetch_assoc() и я за один запрос получал нужный мне массив.

Но есть еще один action:

Код:
public function indexAction()
    {
        $product = new Product();
        $em = $this->getDoctrine()->getManager();
        $add_to_basket_form = $this->createAddToBasketForm($product);

        $products = $em->getRepository('AppShopBundle:Product')->findAll();

        return $this->render('product/index.html.twig', array(
            'products' => $products,
        ));
    }
Он выводит список товаров, но там как было 2 запроса, так и есть, сколько бы элементов не выводилось.

Кстати я в первом случае ради интереса использовал findall(), также 4 запроса
 

A1x

Новичок
@golfstream, AppShopBundle:Cart и AppShopBundle:product - разные сущности не так ли? Почему вы думаете что при обращении к репозиторию AppShopBundle:Cart оно само должно заджойнить AppShopBundle:product в один запрос?
 

scorpion-ds

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