Ich Refactoring ein Zend Framework Anwendung Lehre Doktrin 2.5 DBAL anstelle von Zend_DB (ZF1) zu verwenden. Ich habe folgende Zend_Db query:Beitreten Unterabfrage mit Doktrin 2 DBAL
$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);
Daraus ergibt sich die folgende MySQL-Abfrage:
SELECT `us`.`userSurveyID`,
// More columns from main query `us`
`firstAccess`.`timestamp` AS `dateFirstAccess`
FROM `user_surveys` AS `us`
LEFT JOIN (
SELECT `user_survey_status_entries`.`userSurveyID`,
MIN(timestamp) AS `timestamp`
FROM `user_survey_status_entries`
WHERE (status = 20)
GROUP BY `userSurveyID`
) AS `firstAccess` ON us.userSurveyID = firstAccess.userSurveyID
WHERE (us.surveyID = '10')
Ich kann nicht herausfinden, wie die Unterabfrage zu verbinden, die Lehre 2.5 Query Builder verwenden. In der Hauptabfrage muss ich Spalten aus der Unterabfrage auswählen.
Ich habe here gelesen, dass Doktrin Unterabfragen zu verbinden nicht unterstützt. Wenn das immer noch richtig ist, kann ich diese Abfrage auf andere Weise schreiben, indem ich den SQL-Abfrage-Generator von Doktrin DBAL verwende? Native SQL ist möglicherweise keine gute Lösung für mich, da diese Abfrage später im Code dynamisch erweitert wird.
Rufen Sie das Ergebnis Ihrer subSelect ab und verwenden Sie es als Parameter Ihrer Auswahl. – Veve
@Veve das Ergebnis der subSelect wird ein Array mit Tausenden von Elementen sein, ich glaube nicht, es ist praktikabel, es zuerst abzurufen und es als Parameter in der Hauptabfrage zu verwenden. – aimfeld
Ist diese DQL oder SQL, die Sie versuchen zu erstellen? – Ocramius