Doctrine orm 教义2多对多不在

Doctrine orm 教义2多对多不在,doctrine-orm,Doctrine Orm,我有两个实体:税务和分类 一个税种可以有许多类别,一个类别可以包含在许多税种中 这就是我在税务实体中定义categories属性的方式 /** * @ORM\ManyToMany(targetEntity="\My\Bundle\Entity\Category") * @ORM\JoinTable(name="taxes_categories", * joinColumns={@ORM\JoinColumn(name="tax_id", referencedColumnName

我有两个实体:税务和分类

一个税种可以有许多类别,一个类别可以包含在许多税种中

这就是我在税务实体中定义categories属性的方式

 /**
 * @ORM\ManyToMany(targetEntity="\My\Bundle\Entity\Category")
 * @ORM\JoinTable(name="taxes_categories",
 *      joinColumns={@ORM\JoinColumn(name="tax_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")}
 *      )
 **/
protected $categories;
我试图获取的是与特定税收无关的所有类别

在SQL中,我将执行以下操作

SELECT * FROM category WHERE id NOT IN (SELECT category_id FROM taxes_categories WHERE tax_id = ?)

如何使用Doctrine进行这样的查询?

您不必担心联接表。在分类和税务之间进行连接将完成这项工作。我将使用。诸如此类:

$qb = $entityManager->createQueryBuilder();

$qb->select( array( 'C' ) )
    ->from( '\My\Bundle\Entity\Category', 'C' )
    ->join( 'C.taxes', 'T' )
    ->where( $qb->expr()->neq( 'T.id', ':id' ) )
    ->setParameter( 'id', $id );
您询问获取所有类别,因此我将从类别实体开始工作。我假设您在其中定义了税务属性