首頁  >  文章  >  資料庫  >  如何使用 Doctrine 2 DBAL 連接子查詢?

如何使用 Doctrine 2 DBAL 連接子查詢?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-23 23:50:29669瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn