2016-04-24 88 views
1

我已经在我的仓库Symfony的学说的QueryBuilder一对多过滤

// ProductBundle/Repository/ProductRepository.php 

$qb->where($qb->expr()->eq('afp.id', 15)); 
$qb->andWhere($qb->expr()->eq('afp.id', 14)); 

return $qb 
      ->select('a', 'afp') 
      ->leftJoin('a.productFields', 'afp') 
      ->getQuery() 
      ->getResult(); 

下面的代码,但我八方通获得零回报,但我希望得到的产品至极兼得productFields(所以orWhere不好)

帮助我请进出我的任何想法

回答

1

你想使用MEMBER OF而不是比较id。否则,您正在查找具有两个不同id值的记录,这当然是不可能的。

这会做你想要什么:

$qb->where($qb->expr()->isMemberOf(15, 'a.productFields')); 
$qb->andWhere($qb->expr()->isMemberOf(14, 'a.productFields')); 
+0

它不工作的第一次尝试:'试图调用名为类的“isMemberOf”,“学说\ ORM \查询\ Expr的”一个未定义的方法.'我有尝试用'$ qb-> where(“?1 MEMBER OF a.productFields”); $ qb-> andWhere(“?2 MEMBER OF a.productFields”); $ qb-> setParameters(['1'=> 14,'2'=> 15]);',但是Im卡住了 –

+0

好的,那件事情效果很好。非常感谢您给我一个主意!现在接下来的问题是:是否可以在'id'之外使用'MEMBER OF'作为其他字段? –

+0

您可以传递一个完整的实体而不是一个id,但这或多或少都是一样的。如果这不适合你,请考虑添加另一个问题并更详细地解释你的案例。 –