如何在关联ID不相等的主义中查询ManyToMany关系

时间:2018-09-10 10:41:43

标签: php doctrine-orm doctrine

我确实看到了this question,而活动认为这正是我所需要的。它与我的要求非常相似。然而,改变一点似乎破坏了整个逻辑。

这是我的架构:

/** @Entity **/
class Product
{    
    /**
     * @ManyToMany(targetEntity="Category", inversedBy="products")
     **/
    private $categories;

    public function __construct() {
        $this->categories = new \Doctrine\Common\Collections\ArrayCollection();
    }

    // ...
}

/** @Entity **/
class Category
{
    /**
     * @ManyToMany(targetEntity="Product", mappedBy="categories")
     **/
    private $products;

    public function __construct() {
        $this->products = new \Doctrine\Common\Collections\ArrayCollection();
    }
}

我需要查询不属于特定类别的所有产品。我的尝试是:

// ProductRepository

public function getProducts() {
        return $this->createQueryBuilder('p')
            ->innerJoin('p.categories', 'c')
            ->where('c.id != :id')
            ->setParameter('id', 1)
            ->getQuery()
            ->getResult();
    }

我不在此发布数据,因为此查询的结果是所有产品。我大约有5 000种产品,并且可以肯定的是,并非所有产品都属于我的类别。我尝试了不同的类别。它显示了不取决于我的查询的所有产品。

我还在这里保留SQL查询:

SELECT p0_.* FROM products p0_ 
INNER JOIN product_categories p2_ ON p0_.id = p2_.product_id
INNER JOIN categories c1_ ON c1_.id = p2_.category_id 
WHERE c1_.id != 1

另一个问题是,它使我重复了产品。我可以使用group by p0_.id,但不知道它是否有效。

我阅读了有关多对多关系以及如何查询它们的google信息,但所有有关平等查询的信息我都发现了,但我有非平等。

0 个答案:

没有答案