使用 Doctrine 2 DBAL 连接子查询
本文探讨了 Doctrine 2. DBAL 中连接子查询的过程。虽然 Doctrine 2 因不支持子查询连接而闻名,但本文提出了一种使用 DBAL 连接的 createQueryBuilder() 的解决方法。
前面的代码可以修改为使用 Doctrine 2 DBAL 的查询构建器:
<code class="php">$subSelect = $connection->createQueryBuilder() ->select(array('userSurveyID', 'MIN(timestamp) timestamp')) ->from('user_survey_status_entries') ->where('status = :status') ->groupBy('userSurveyID'); $select = $connection->createQueryBuilder() ->select($selectColNames) ->from('user_surveys', 'us') ->leftJoin('us', sprintf('(%s)', $subSelect->getSQL()), 'firstAccess', 'us.userSurveyID = firstAccess.userSurveyID') ->setParameter('status', UserSurveyStatus::ACCESSED) ->where('us.surveyID = :surveyID') ->setParameter('surveyID', $surveyID);</code>
在此解决方法中,子查询是在连接上使用 createQueryBuilder() 构造的,而不是实体管理器,并且其 SQL 包含在括号中。然后使用 leftJoin() 将其连接到主查询,并使用 setParameter() 在主查询中设置子查询中使用的参数。
通过执行以下步骤,您可以在 Doctrine 2 中有效地连接子查询DBAL,即使直接子查询支持不可用。
以上是如何在 Dotrine 2 DBAL 中加入子查询?的详细内容。更多信息请关注PHP中文网其他相关文章!