小编Lo'*_*Lo'的帖子

不要在多对多关系中使用Doctrine QueryBuilder进行查询

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

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

实体设置具有属性"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")
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何使用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();
Run Code Online (Sandbox Code Playgroud)

这不会返回任何结果.

谢谢!

doctrine many-to-many query-builder symfony

4
推荐指数
1
解决办法
6789
查看次数

标签 统计

doctrine ×1

many-to-many ×1

query-builder ×1

symfony ×1