For at få adgang til ->deltagere på samme måde ved brug af QueryBuilder, skal du indbygge join ind i Query.
Kodeeksempel kunne være noget som:
$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 bruges her til at gøre resultatet muligvis multidimensionelt.
Den slags forespørgsler (testet under PgSQL) fik Phalcon til at oprette nogle efterfølgende ResultSet-objekter af deltagere pi
inde i resultatsæt for projekter p
.
Du kan stadig gentage den ved at bruge foreach()
men trods alt er jeg ikke sikker på, at det reducerede det endelige antal forespørgsler .
Udløser $result = $resultSet->toArray()
lavet $result['pi']
forbliv som resultatsæt, så du bør være forsigtig med det. Du kan tvinge den til at dumpe som arrays ved at definere nøjagtige kolonner i columns()
parametre. Det har sin ulempe - du vil ikke længere tjene på groupBy()
, i det mindste på Phalcon 1.3.2 og PHP 5.5.3 kører jeg her.