如何使用 Doctrine 2 DBAL 连接子查询?

Mary-Kate Olsen
发布: 2024-10-23 23:50:29
原创
764 人浏览过

How to Join Subqueries with Doctrine 2 DBAL?

使用 Doctrine 2 DBAL 连接子查询

简介

将 Zend Framework 应用程序迁移到 Doctrine 2.5 DBAL 时,您可能会遇到连接子查询的挑战。本文旨在为这个特定问题提供全面的指南。

问题

给定的 Zend_Db 查询具有一个子查询来检索特定用户调查的最小时间戳。主查询随后加入该子查询以获取附加数据。目标是使用 Doctrine 2.5 的查询生成器复制此功能。

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中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板