Heim >Datenbank >MySQL-Tutorial >Wie verbinde ich Unterabfragen mit Doctrine 2 DBAL?
Bei der Migration einer Zend Framework-Anwendung auf Doctrine 2.5 DBAL können beim Verknüpfen von Unterabfragen Probleme auftreten. Dieser Artikel soll eine umfassende Anleitung zu diesem speziellen Problem bieten.
Die gegebene Zend_Db-Abfrage verfügt über eine Unterabfrage, um Mindestzeitstempel für bestimmte Benutzerumfragen abzurufen. Die Hauptabfrage verbindet sich anschließend mit dieser Unterabfrage, um zusätzliche Daten abzurufen. Ziel ist es, diese Funktionalität mit dem Abfrage-Builder von Doctrine 2.5 zu replizieren.
Anfangs wurde angenommen, dass Doctrine das Verknüpfen von Unterabfragen nicht unterstützt. Es gibt jedoch eine Problemumgehung.
Die Lösung besteht darin, das Roh-SQL der Unterabfrage abzurufen und es in Klammern zu setzen. Die Join-Syntax ähnelt einer regulären Join-Operation. In der Unterabfrage verwendete Parameter müssen jedoch in der Hauptabfrage definiert werden.
<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>
Mit dieser Problemumgehung können Sie Unterabfragen in Doctrine 2.5 DBAL verknüpfen . Indem Sie das Roh-SQL der Unterabfrage abrufen und ihre Parameter in der Hauptabfrage festlegen, können Sie die gewünschte Abfragestruktur erreichen.
Das obige ist der detaillierte Inhalt vonWie verbinde ich Unterabfragen mit Doctrine 2 DBAL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!