Aby uzyskać dostęp do ->uczestników w ten sam sposób za pomocą QueryBuilder, musisz wbudować join w Query.
Przykładowy kod może wyglądać tak:
$queryBuilder = $this->getDI()->getModelsManager()
->createBuilder()
->columns(['p.id','participants.*'])
->addFrom('Entity\Projects', 'p')
->leftJoin('Entity\Participants', 'participants.projectId = p.id', 'participants')
->groupBy('p.id, participants.id')
->orderBy('p.id ASC');
$resultSet = $queryBuilder->getQuery()->execute();
groupBy() by jest tutaj używany, aby wynik był możliwie wielowymiarowy.
Tego rodzaju zapytanie (testowane pod PgSQL) spowodowało, że Phalcon utworzył kilka kolejnych obiektów ResultSet uczestników pi wewnątrz zestawów wyników dla projektów p .
Nadal możesz przejść przez to za pomocą foreach() ale mimo wszystko nie jestem pewien, czy zmniejszyło to ostateczną liczbę zapytań .
Uruchamianie $result = $resultSet->toArray() wykonane $result['pi'] pozostań jako zestaw wyników, więc powinieneś zachować ostrożność. Możesz wymusić zrzut jako tablice, definiując dokładne kolumny w columns() parametry. Ma to swoją wadę - nie będziesz już czerpać zysków z groupBy() , przynajmniej na Phalconie 1.3.2 i PHP 5.5.3 tutaj działam.