Sql/Doctrine查询找到具有多对多关联的多个条件的数据
问题描述:
我在使用symfony3的学说中实现了具有多对多关系的类别过滤器。我有一个实体Business
和Category
与多对多关联。新表多对多的关系看起来像下面Sql/Doctrine查询找到具有多对多关联的多个条件的数据
business_id category_id
1 1
1 2
2 1
2 2
3 1
现在我想所有这些都为category_id=1 and category_id=2
业务。
它应该选择商家ID 1,2
。
我的SQL查询: -
SELECT * FROM business
LEFT JOIN business_category ON business_category.business_id=business.id
WHERE business_category.category_id = 1 AND business_category.category_id = 2
任何SQL或学说查询会工作。
我真的很感激任何帮助。
答
要获得这两个类别你写存在于您的查询生成器如下的企业,我想你的实体映射与适当的多对多的关系
$repo = $this->getDoctrine()->getRepository('YourBundle:Business');
$repo = $this->createQueryBuilder('b')
->addSelect('COUNT(DISTINCT c.id) AS total_categories')
->innerJoin('b.categories', 'c');
$categoryIds = array(1,2);
$repo->add('where', $qb->expr()->in('c', $categoryIds))
->groupBy('b.id')
->having('total_categories = '.count($categoryIds))
->getQuery()
->getResult();
作为参考请参阅另一个答案here
答
你可以尝试
$qb->select('p')
->from('AppBundle:Project', 'p')
->innerJoin('p.users', 'u')
->where('u.id=:userIdDaily')
->andWhere('u.id=:UserID')
->setParameter('userIdDaily', $UserObj)
->setParameter('UserID', $UserObj->getId())
;
$query = $qb->getQuery();
$results = $query->getResult();
我有项目和用户多对多的关系。我用这个多来获取数据的where子句
+0
我已经尝试过但没有为我工作。 –
+0
它显示的结果是什么? –
你的意思是每个企业应该存在于1类和2类两个类别甚至没有单一类别? –
是的,@MKhalidJunaid和我需要用AND操作来获取这些业务。 –