我在查询构建器中工作,目的是返回经销商付款的排名。经销商通过非外键列(affiliateCode)与其客户关联,因此我需要将此连接与依赖于此非键连接的实体列表相关联。
结果我最终这样结果但它不起作用。虽然没有抛出任何错误。
$queryBuilder = $this->getEntityManager()->createQueryBuilder();
$queryBuilder->select('SUM(pay.value) as total_points, cli.id as client_id')
->from('Application\Model\Payment', 'pay')
->innerJoin('pay.subscription', 'sub')
->innerJoin('sub.client', 'representative')
->innerJoin(
'representative.userCollection',
'seller',
'WITH',
'seller.affiliateCode = cli.affiliateCode'
)
->innerJoin('seller.clientCollection', 'cli')
->where(
'
pay.status = :donePaymentStatus
AND representative.affiliateCode IS NOT NULL
'
)
->groupBY('cli.id')
->orderBY('total_points', 'DESC');
$queryBuilder->setParameters([
'donePaymentStatus' => PaymentStatus::DONE,
]);
如果我想通过连接尝试做什么,你能否提出另一种选择。也许是嵌套查询。
答案 0 :(得分:0)
您没有收到错误的原因是您的语法很好,但您的逻辑有问题。 INNER JOIN是您可以执行的最独特的连接 - 它将仅返回符合所有条件的记录。你可能会有更少的独家联接(LEFT或RIGHT JOIN)更幸运。
Venn Diagrams帮助:
http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/