doctrine - 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
' 表的额外连接,感觉“脏”。还有其他方法可以进行这样的加入吗?
解决方案
推荐阅读
- javascript - 如何动态创建嵌套元素?
- ckeditor - 如何在特定ckeditor的光标位置插入文本?
- java - Firebase dataSnapshot.getValue(Subclass.class) 函数永远不会返回
- c# - 无法理解 async 的行为,在 c# 中等待
- css - 如何修复中心的引导导航切换按钮
- python - numpy中的3-D numpy矩阵乘法得到一维数组
- html - 无法显示 codepen 图标
- java - Spring-data-elasticsearch“嵌套查询抛出[嵌套]未能在路径下找到嵌套对象”异常
- docker - logstash 输入文件配置——从不同的 docker 获取输入文件
- python - 在python中用数字修改列表