2015-08-22 5 views
0

У меня есть два объекта Category и Item. Я хочу получить доступ ко всем элементам определенной категории.
В настоящее время я делаю это следующим образом:Вложенные запросы с использованием метода symfony findBy

  • Получить объект, соответствующий данной категории
  • Получить все детали, передавая category выбранный в предыдущем шаге в качестве параметра findBy метода.

Вот мой код:

public function indexAction($category) 
    { 
    $em = $this->getDoctrine()->getManager(); 

    $category = $em -> getRepository('AppBundle:Category') 
    -> findOneBy(array(
     "name" => $category 
    )); 

    $entities = $em->getRepository('AppBundle:Item') 
    ->findBy(array(
     'category' => $category 
    )); 

    return array(
     'entities' => $entities, 
     'title' => $category 
    ); 
    } 

я делаю правильно? В этом случае мне нужны два отдельных запроса. Есть ли эффективный метод?

ответ

1

У вашей организации Category есть отношения OneToMany с Item (http://symfony.com/doc/current/book/doctrine.html#entity-relationships-associations)?

Если это так, вы можете настроить соединение и использовать его для получения всех элементов, соответствующих категории, путем определения нового метода в классе сущностей Category. Что-то вроде:

public function findOneByNameJoinedToItems($category) 
{ 
$query = $this->getEntityManager() 
    ->createQuery(
     'SELECT c, i FROM AppBundle:Category c 
     JOIN c.item i 
     WHERE c.name = :name' 
    )->setParameter('name', $category); 

try { 
    return $query->getSingleResult(); 
} catch (\Doctrine\ORM\NoResultException $e) { 
    return null; 
} 

}

Смотрите здесь больше: http://symfony.com/doc/current/book/doctrine.html#joining-related-records

Смежные вопросы