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 中国語 Web サイトの他の関連記事を参照してください。