2016-01-25 2 views
1

В моем продукте может быть много категорий. Однако в одной части объекта мне нужно получить определенную категорию. Поэтому вместо того, чтобы получать все категории, а затем в поиске цикла для определенного, мне нужно получить только эту конкретную категорию. Для этого я использую построитель запросов.Symfony2 с помощью Query builder для загрузки определенного объекта ManyToMany

public function findProduct($id) { 
    $qb = $this->createQueryBuilder('p') 
     ->addSelect(array('p', 'cat')) // many to many table 
     ->addSelect(array('p', 'category')) // the category entity 
     ->leftJoin('p.category', 'cat') 
     ->leftJoin('cat.category', 'category') 
     ->andWhere("category.id = 15") // error here 
     ->SetParameter('id', $id); 


    return $qb->getQuery()->getOneOrNullResult(); 
} 

С помощью этого запроса я легко в состоянии сделать $ product->getCategory[0] ([], так как массив) и получить только категорию, что мне нужно (в данном примере категории с ID = 15)

ПРОБЛЕМЫ:

Однако если продукт оленьей кожи имеет категорию с определенным идентификатором .. Она возвращает весь нуль продукта ..

Так что если я сделать:

$product = $em->getRepository('MpShopBundle:Product')->findProduct($id); = null 

Но вместо этого он должен быть таким:

$product = $em->getRepository('MpShopBundle:Product')->findProduct($id); = object 

$product->getCategory() = null 

Как я могу сделать эту работу в построитель запросов? Возможно ли это?

ответ

0

Это должно сработать. Вместо того, чтобы сдерживать весь ваш запрос (это то, что он делает), просто ограничивайте соединение).

LeftJoin ('cat.category', 'категория', 'С', 'category.id = 15')

Таким образом, вы должны получить продукт всегда только & категории, если идентификатор = = 15.

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