ホームページ >データベース >mysql チュートリアル >Doctrine 2 DBAL を使用してサブクエリを結合するにはどうすればよいですか?
Zend Framework 2 アプリケーションでは、Zend_DB が Doctrine 2.5 DBAL に置き換えられます。次の Zend_DB クエリはこれを示しています:
$subSelect = $db->select() ->from('user_survey_status_entries', array('userSurveyID', 'timestamp' => 'MIN(timestamp)')) ->where('status = ?', UserSurveyStatus::ACCESSED) ->group('userSurveyID'); $select = $db->select() // $selectColNames contains columns both from the main query and // the subquery (e.g. firstAccess.timestamp AS dateFirstAccess). ->from(array('us' => 'user_surveys'), $selectColNames) ->joinLeft(array('firstAccess' => $subSelect), 'us.userSurveyID = firstAccess.userSurveyID', array()) ->where('us.surveyID = ?', $surveyID);
ただし、ユーザーは Doctrine 2.5 クエリ ビルダーを使用してサブクエリに結合し、メイン クエリのサブクエリから列を選択したいと考えています。残念ながら、Doctrine はサブクエリの結合をサポートしていません。
幸いなことに、ユーザーは Doctrine DBAL の SQL クエリ ビルダーを使用して次のクエリを作成できます:
$subSelect = $connection->createQueryBuilder() ->select(array('userSurveyID', 'MIN(timestamp) timestamp')) ->from('user_survey_status_entries') // Instead of setting the parameter in the main query below, it could be quoted here: // ->where('status = ' . $connection->quote(UserSurveyStatus::ACCESSED)) ->where('status = :status') ->groupBy('userSurveyID'); $select = $connection->createQueryBuilder() ->select($selectColNames) ->from('user_surveys', 'us') // Get raw subquery SQL and wrap in brackets. ->leftJoin('us', sprintf('(%s)', $subSelect->getSQL()), 'firstAccess', 'us.userSurveyID = firstAccess.userSurveyID') // Parameter used in subquery must be set in main query. ->setParameter('status', UserSurveyStatus::ACCESSED) ->where('us.surveyID = :surveyID')->setParameter('surveyID', $surveyID);
以上がDoctrine 2 DBAL を使用してサブクエリを結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。