我的产品可以有多种类别。然而,在对象的一部分中,我需要获得特定的类别。因此,我不需要获取所有类别,然后在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
如何在查询构建器中完成此工作?这甚至可能吗?
答案 0 :(得分:0)
这应该有效。而不是约束你的整个查询(这就是它的作用)只是约束连接。)
leftJoin(' cat.category',' category',' WITH',' category.id = 15')
这样你就可以随时随地获得你的产品。仅当id == 15时才使用类别。