gpt4 book ai didi

symfony - 在多对多关系中使用 Doctrine QueryBuilder 进行 NOT IN 查询

转载 作者:行者123 更新时间:2023-12-04 23:19:41 24 4
gpt4 key购买 nike

在我的 Symfony2 项目中,我有两个实体“联系人”和“设置”,具有多对多关系:

/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Settings", cascade={"persist"})
* @ORM\JoinColumn(nullable=true)
*/
private $settings;

实体设置有一个属性“parametre”,它是一个简单的字符串。

现在我想获取所有没有任何“参数”为“主题”设置的联系人。

我可以在 SQL 中使用以下查询来做到这一点:
SELECT DISTINCT(c.id) FROM contact c WHERE c.id
NOT IN (SELECT cs.contact_id FROM contact_settings cs
INNER JOIN Settings s ON s.id = cs.settings_id
WHERE s.parametre = "THEMES")

但我不知道如何使用 Doctrine 的查询构建器来实现。
这是我迄今为止尝试过的:
$query = $this->createQueryBuilder('c')
->join('c.settings', 's');

$qb2 = $qb;

$qb2->select('s2')
->from('AppBundle\Entity\Settings', 's')
->where('s2.parametre = :parametre');

$query->where(($qb->expr()->notIn('s', $qb2->getDQL())));
$query->setParameter('parametre', 'THEMES');
$result = $query->getQuery()->getResult();

那不会返回任何结果。

谢谢!

最佳答案

你可以尝试这样的事情:

$subQueryBuilder = $this->getEntityManager()->createQueryBuilder();
$subQuery = $subQueryBuilder
->select(['cs.id'])
->from('AcmeDemoBundle:Contact', 'cs')
->innerJoin('cs.settings', 's')
->where('s.parameter = :parameter')
->setParameter('parameter', 'THEMES')
->getQuery()
->getArrayResult()
;

$queryBuilder = $this->getEntityManager()->createQueryBuilder();
$query = $queryBuilder
->select(['c'])
->from('AcmeDemoBundle:Contact', 'c')
->where($queryBuilder->expr()->notIn('c.id', ':subQuery'))
->setParameter('subQuery', $subQuery)
->getQuery()
;

$result = $query->getResult();

这只是你的问题的一个例子。我不能提供完整的例子,因为我不知道你的实体的结构......

关于symfony - 在多对多关系中使用 Doctrine QueryBuilder 进行 NOT IN 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31008726/

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