Symfony2 在组中获取不相关的多对多用户
Symfony2 get non related many-to-many Users in Group
我在 Symfony2 项目中使用 Doctrine 使用户和组实体具有多对多关联。
我已经成功地在表单生成器中将关联的用户与组关联起来,如下所示:
$builder->add('members', 'entity', array(
'class' => 'TesarUserBundle:User',
//....
'query_builder' => function(\Tesar\UserBundle\Entity\UserRepository $er ) use ($options) {
return $er->createQueryBuilder('a')
->leftJoin('a.groups', 'u')
->where('u.id = :id')
->setParameter('id', "3");
}
));
这只是对 ID 为 3 的组的用户进行 leftJoin。
我在 select 组 ID 为 3 的非关联用户时遇到问题。我目前的代码:
//...
return $er->createQueryBuilder("a")
->leftJoin( 'a.groups', 'g', Expr\Join::WITH, 'g.id = :group_id')
->where('g.id IS NULL')
->setParameter('group_id', "3");
//...
我发现,如果两个组中都有一个用户,则输出中包含用户,这不是我想要的。 (有两个测试组和许多用户)
我如何 select 没有关联到我的 ID 为 3 的组的用户?
编辑:
根据 maches 的回答,我重写了我的查询生成器,一切似乎都正常。
return $er->createQueryBuilder('a')
->select("u")
->from("TesarUserBundle:User","u")
->leftJoin('u.groups g WITH g.id = :groupId', false)
->where(":groupId NOT MEMBER OF u.groups")
->setParameter('groupId', "2");
我的 "where IS NULL" 并没有真正发挥作用。 NOT MEMBER OF 就可以了。如果有人提出更好的解决方案,请发表评论。不确定它是否遵循最佳实践。
public function findWithoutParameter($pid)
{
return $this->getEntityManager()
->createQuery("SELECT c"
. " FROM AmoMainBundle:Company c "
. "WHERE ?1 NOT MEMBER OF c.params ")
->setParameter(1,$pid)->getResult();
}
没有 QB,但在我的案例中适用于多对多。来自我的存储库的功能。
Doc of DQL
我在 Symfony2 项目中使用 Doctrine 使用户和组实体具有多对多关联。 我已经成功地在表单生成器中将关联的用户与组关联起来,如下所示:
$builder->add('members', 'entity', array(
'class' => 'TesarUserBundle:User',
//....
'query_builder' => function(\Tesar\UserBundle\Entity\UserRepository $er ) use ($options) {
return $er->createQueryBuilder('a')
->leftJoin('a.groups', 'u')
->where('u.id = :id')
->setParameter('id', "3");
}
));
这只是对 ID 为 3 的组的用户进行 leftJoin。
我在 select 组 ID 为 3 的非关联用户时遇到问题。我目前的代码:
//...
return $er->createQueryBuilder("a")
->leftJoin( 'a.groups', 'g', Expr\Join::WITH, 'g.id = :group_id')
->where('g.id IS NULL')
->setParameter('group_id', "3");
//...
我发现,如果两个组中都有一个用户,则输出中包含用户,这不是我想要的。 (有两个测试组和许多用户) 我如何 select 没有关联到我的 ID 为 3 的组的用户?
编辑:
根据 maches 的回答,我重写了我的查询生成器,一切似乎都正常。
return $er->createQueryBuilder('a')
->select("u")
->from("TesarUserBundle:User","u")
->leftJoin('u.groups g WITH g.id = :groupId', false)
->where(":groupId NOT MEMBER OF u.groups")
->setParameter('groupId', "2");
我的 "where IS NULL" 并没有真正发挥作用。 NOT MEMBER OF 就可以了。如果有人提出更好的解决方案,请发表评论。不确定它是否遵循最佳实践。
public function findWithoutParameter($pid)
{
return $this->getEntityManager()
->createQuery("SELECT c"
. " FROM AmoMainBundle:Company c "
. "WHERE ?1 NOT MEMBER OF c.params ")
->setParameter(1,$pid)->getResult();
}
没有 QB,但在我的案例中适用于多对多。来自我的存储库的功能。 Doc of DQL