gpt4 book ai didi

php - 教义2中的子查询 notIN 函数

转载 作者:IT王子 更新时间:2023-10-28 23:48:49 26 4
gpt4 key购买 nike

我想选择不在特定服务中的成员。我有 3 张 table :

  • 成员
  • 服务
  • membre_service(membreservice的关系)

我正在使用学说 2,在 SQL 中我的查询是:

SELECT m.* FROM membre m WHERE m.`id` NOT IN (
SELECT ms.membre_id FROM membre_service ms WHERE ms.service_id != 29
)

在教义中,我这样做:

$qb  = $this->_em->createQueryBuilder();
$qb2 = $qb;
$qb2->select('m.id')
->from('Custom\Entity\MembreService', 'ms')
->leftJoin('ms.membre', 'm')
->where('ms.id != ?1')
->setParameter(1, $service);

$qb = $this->_em->createQueryBuilder();
$qb->select('m')
->from('Custom\Entity\Membre', 'm')
->where($qb->expr()->notIn('m.id', $qb2->getDQL())
);
$query = $qb->getQuery();
//$query->useResultCache(true, 1200, __FUNCTION__);

return $query->getResult();

我收到以下错误:

Semantical Error] line 0, col 123 near 'm WHERE ms.id': Error: 'm' is already defined.

最佳答案

同一个别名不能在同一个查询中定义2次

$qb  = $this->_em->createQueryBuilder();
$qb2 = $qb;
$qb2->select('m.id')
->from('Custom\Entity\MembreService', 'ms')
->leftJoin('ms.membre', 'm')
->where('ms.id != ?1');

$qb = $this->_em->createQueryBuilder();
$qb->select('mm')
->from('Custom\Entity\Membre', 'mm')
->where($qb->expr()->notIn('mm.id', $qb2->getDQL())
);
$qb->setParameter(1, $service);
$query = $qb->getQuery();

return $query->getResult();

理想情况下,您应该为您的实体使用多对多关系,在这种情况下,您的查询会简单得多。

关于php - 教义2中的子查询 notIN 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11924164/

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