我目前正在尝试使用Doctrine2 QueryBuilder构建查询。但是,我在尝试执行以下操作时遇到困难:
我有一个名为'客户'的实体。该实体与“用户”的ManyToMany-Relation有关。 “用户”再次代表与PhoneNumber的ManyToMany-Relation。
所以它几乎是:
Customer <- @ManyToMany -> User <- @ManyToMany -> PhoneNumber
现在我正在尝试根据PhoneNumber选择客户。所以现在我有以下内容:
$qb = $this->getEntityManager()->createQueryBuilder();
$qb
->select('c')
->from('AppBundle:Customer', 'c')
->join('AppBundle:User', 'u')
->join('AppBundle:PhoneNumber', 'u');
现在的问题是我不知道如何构建查询的where-section。原因是可能有多个用户和多个电话号码绑定到客户。你对如何进行了解吗?
答案 0 :(得分:0)
如果您的实体 mappedBy / InversedBy ,您可以
$qb = $this->getEntityManager()->createQueryBuilder();
$qb
->select('c')
->from('AppBundle:Customer', 'c')
->innerJoin('c.users', 'u')
->innerJoin('u.phoneNumbers', 'p')
->andWhere('p.number = :numberPhone')
->setParameter('numberPhone', $varPhoneNumber)
;
答案 1 :(得分:0)
我的解决方案:
使用内部Join()和'MEMBER OF'修复了问题。这样我就可以将每个实体与任何其他实体连接起来。 E.g:
$qb = $this->getEntitiyManager()->createQueryBuilder()
->select('c')
->from('AppBundle:Customer', 'c')
->innerJoin('AppBundle:User', 'u', 'WITH', 'c.id MEMBER OF c.users')
->innerJoin('AppBundle:PhoneNumber', 'ph', 'WITH', 'ph.id MEMBER OF u.phoneNumbers')
->orWhere($qb->expr()->orX(
$qb->expr()->eq('ph.number', ':number')
))
->setParameter('number', $somePhoneNumber);