Jestem refactoring Zend Framework aplikacji do używania doktryny 2.5 DBAL zamiast Zend_DB (ZF1). Mam następujące zapytanie Zend_Db:Dołącz do podkwerendy z doktryną 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);
Skutkuje to w poniższym zapytaniu MySQL:
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')
nie mogę dowiedzieć się, jak dołączyć do podzapytania stosując doktrynę 2.5 Konstruktora kwerend. W głównym zapytaniu muszę wybrać kolumny z podzapytania.
Przeczytałem here, że doktryna nie obsługuje łączenia podkwerend. Jeśli to nadal prawda, czy mogę napisać to zapytanie w inny sposób przy użyciu kreatora zapytania SQL z doktryny DBAL? Natywny SQL może nie być dobrym rozwiązaniem dla mnie, ponieważ zapytanie to będzie dynamicznie rozszerzane później w kodzie.
Pobierz wynik swojego subSelect, a następnie użyj go jako parametru wybranego. – Veve
@Veve Wynik subSelektu będzie tablicą zawierającą tysiące elementów, nie sądzę, że jest to możliwe, aby go najpierw pobrać i użyć jako parametru w głównym zapytaniu. – aimfeld
Czy to DQL lub SQL, który próbujesz zbudować? – Ocramius