gpt4 book ai didi

sql - 在 Doctrine DQL 中选择 count() 与左连接 manyToMany 单向关系,其中用户没有关系特定组

转载 作者:行者123 更新时间:2023-12-04 10:37:48 25 4
gpt4 key购买 nike

情况:我试图在 DQL 中为不在特定组中的用户选择 count()。
User 之间的标准多对多单向关系和 Group来自 FOSUserBundle 的实体(和 SonataUserBundle )。系统:Symfony 2.5,Doctrine 2.4。

实体用户

附言这不是真正复制的代码。这是不可能的,因为有几个层扩展了不同格式和位置的不同配置文件,所以如果您发现输入错误,这不是问题。

namespace RAZ\UserBundle\Entity;
/**
* @ORM\Table(name="fos_user_user")
*/
class User
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @var Collection
*
* @ORM\ManyToMany(targetEntity="Group")
* @ORM\JoinTable(name="fos_user_user_group")
*/
protected $groups;
}

实体组
namespace RAZ\UserBundle\Entity;
/**
* @ORM\Table(name="fos_user_group")
*/
class Group
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
}

问题:这甚至可以在 DQL 中完成吗?

问题非常类似于: How to get entities in a many-to-many relationship that do NOT have a corresponding linked entity with DQL and Doctrine?不同之处在于我只需要检查一个特定的组。

工作 SQL(返回 1423):
SELECT COUNT(*) cnt
FROM fos_user_user u
LEFT JOIN fos_user_user_group dug ON u.id = dug.user_id AND dug.group_id = 70
WHERE dug.user_id IS NULL

DQL 工作不正确(返回 3208):
SELECT COUNT(u)
FROM RAZUserBundle:User u
LEFT JOIN u.groups dug WITH dug.id = 70
WHERE dug IS NULL

问题是 DQL 生成不同的 SQL:
SELECT COUNT(u.id)
FROM fos_user_user u
LEFT JOIN fos_user_user_group ug ON u.id = ug.user_id
LEFT JOIN fos_user_group g ON g.id = ug.group_id AND (g.id = 70)
WHERE g.id IS NULL

有什么建议?

最佳答案

我认为您的 DQL 不太正确。你能发一下吗?但与此同时,这应该有效。

   $em = $this->getDoctrine()->getManager();
$qb = $em->createQueryBuilder();

$result = $qb->select('COUNT(u)')
->from('UserBundle:User' , 'u')
->leftJoin('u.UserGroup','g')
->where('g.GroupId = :id')
->andWhere('g.UserId = :null')
->setParameter('id', 70)
->setParameter('null', null)
->getQuery()
->getOneOrNullResult();

以这种方式编写 DQL 也更容易阅读;)

关于sql - 在 Doctrine DQL 中选择 count() 与左连接 manyToMany 单向关系,其中用户没有关系特定组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25886829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com