Heim >Datenbank >MySQL-Tutorial >Wie verbinde ich Unterabfragen mit Doctrine 2 DBAL?

Wie verbinde ich Unterabfragen mit Doctrine 2 DBAL?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-23 23:50:29766Durchsuche

How to Join Subqueries with Doctrine 2 DBAL?

Unterabfragen mit Doctrine 2 DBAL verknüpfen

Einführung

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.

Das Problem

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.

Verknüpfung von Unterabfragen in Doctrine 2.5

Anfangs wurde angenommen, dass Doctrine das Verknüpfen von Unterabfragen nicht unterstützt. Es gibt jedoch eine Problemumgehung.

Lösung

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-Snippet

<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>

Fazit

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn