[英]Doctrine query builder ManyToMany with join table
我尝试通过教义查询生成器构建类似于此查询的内容:
SELECT m.id
FROM product p, model m
INNER JOIN product_model pm ON (m.id = pm.model_id)
WHERE p.id = pm.product_id AND m.serial = ? AND p.id = ?
表'product_model'是ManyToMany单向关系中的JoinTable。 我在下面使用代码:
$queryBuilder = $this->entityManager->createQueryBuilder();
$queryBuilder
->select('m.id')
->from(Model::class, 'm')
->join(Product::class, 'p', Join::ON, '1 = 1')
->where('m.serial.serial = :serial')
->andWhere('p.productId.id = :productId')
->setParameters(
[
'serial' => (string)$serial,
'productId' => $productId->value(),
]
);
$query = $queryBuilder->getQuery();
$results = $query->getOneOrNullResult();
但是,当我尝试转储此查询的SQL时,我得到了:
SELECT m0_.id AS id_0 FROM model m0_ INNER JOIN product p1_ ON (1 = 1) WHERE m0_.serial = ? AND p1_.id = ?
这个查询的结果不是我所期望的
我找到了解决方案。 我需要product_model表格的另一个实体类,该实体类具有复合键和查询中的小变化:
$queryBuilder
->select('m.id')
->from(Model::class, 'm')
->join(ProductModel::class, 'pm', Join::WITH, $queryBuilder->expr()->eq('m.id', 'pm.modelId'))
->where('m.serial.serial = :serial')
->andWhere('pm.productId = :productId')
->setParameters(
[
'serial' => (string)$serial,
'productId' => $productId->value(),
]
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.