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.