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

Wie verbinde ich Unterabfragen mit Doctrine 2 DBAL?

DDD
Freigeben: 2024-10-24 00:15:02
Original
683 Leute haben es durchsucht

How to Join Subqueries Using Doctrine 2 DBAL?

Unterabfragen mit Doctrine 2 DBAL verbinden

In einer Zend Framework 2-Anwendung wird Zend_DB durch Doctrine 2.5 DBAL ersetzt. Die folgende Zend_DB-Abfrage zeigt dies:

$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);
Nach dem Login kopieren

Benutzer möchten jedoch der Unterabfrage mit dem Doctrine 2.5-Abfrage-Builder beitreten und Spalten aus der Unterabfrage in der Hauptabfrage auswählen. Leider unterstützt Doctrine das Verknüpfen von Unterabfragen nicht.

Glücklicherweise können Benutzer den SQL-Abfrage-Builder von Doctrine DBAL verwenden, um diese Abfrage zu schreiben:

$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);
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage