首页 > 解决方案 > Doctrine Query Builder:在多个字段中加入相同的实体类

问题描述

我有一个名为 的实体Path,它Product使用两个不同的字段链接到另一个实体。

/**
 * @ORM\Entity
 */
class Path
{
    /**
     * @ORM\ManyToOne(targetEntity="Product")
     */
    private $product;

    /**
     * @ORM\ManyToMany(targetEntity="Product")
     */
    private $products;
}

由于需要在“主”产品上执行一些逻辑,同时允许附加到应用程序其他部分的多个产品,因此完成了不同领域的链接。

编辑:字段中的产品product不存在于products字段中。

我正在寻找构建一个查询,该查询将对 进行一些其他检查Product,可能与与Product. 我希望数据库只对产品表执行一次连接(就像我没有在 Doctrine 中完成的那样)。

目前我有一个QueryBuilder这样的设置:

$qb->leftJoin("path.products", 'path_product');
$qb->join(Product::class, 'products', 'WITH', "path.product = products OR path_product.id = products.id")

生成的 SQL:

SELECT path.id AS id_0
  FROM path path 
  LEFT JOIN path_product path_product ON path.id = path_product.path_id
  LEFT JOIN product product_1 ON product_1.id = path_product.product_id
  LEFT JOIN product product_2 ON (path.product_id = product_2.id OR product_1.id = product_2.id)

(这是从 Doctrine Query Builder 生成的简化 SQL,删除了不必要的字段并扩展了别名)

...但这会产生一个与Product' 表的额外连接,感觉“脏”。还有其他方法可以进行这样的加入吗?

标签: doctrinemany-to-manydql

解决方案


推荐阅读