Symfony2使用“查询”构建器加载特定的ManyToMany对象

时间:2016-01-25 08:06:17

标签: php mysql symfony query-builder

我的产品可以有多种类别。然而,在对象的一部分中,我需要获得特定的类别。因此,我不需要获取所有类别,然后在for循环中搜索特定类别,而只需要获取此特定类别。为此我使用查询构建器。

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)

问题:

但是,如果产品没有具有特定ID的类别,则返回整个产品null ..

所以,如果我这样做:

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

但它应该是这样的:

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

$product->getCategory() = null

如何在查询构建器中完成此工作?这甚至可能吗?

1 个答案:

答案 0 :(得分:0)

这应该有效。而不是约束你的整个查询(这就是它的作用)只是约束连接。)

  

leftJoin(' cat.category',' category',' WITH',' category.id = 15')

这样你就可以随时随地获得你的产品。仅当id == 15时才使用类别。