将 Zend Framework 应用程序迁移到 Doctrine 2.5 DBAL 时,您可能会遇到连接子查询的挑战。本文旨在为这个特定问题提供全面的指南。
给定的 Zend_Db 查询具有一个子查询来检索特定用户调查的最小时间戳。主查询随后加入该子查询以获取附加数据。目标是使用 Doctrine 2.5 的查询生成器复制此功能。
最初,人们认为 Doctrine 不支持连接子查询。不过,有一个解决方法。
解决方案是获取子查询的原始 SQL,并将其括在括号中。连接语法类似于常规连接操作。但是,子查询中使用的参数必须在主查询中定义。
<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>
此解决方法允许您在 Doctrine 2.5 DBAL 中加入子查询。通过获取子查询的原始SQL并在主查询中设置其参数,就可以实现想要的查询结构。
以上是如何使用 Doctrine 2 DBAL 连接子查询?的详细内容。更多信息请关注PHP中文网其他相关文章!