Pour accéder aux ->participants de la même manière en utilisant QueryBuilder, vous devrez créer une jointure dans Query.
L'exemple de code pourrait être quelque chose comme :
$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 est utilisé ici pour rendre le résultat éventuellement multidimensionnel.
Ce type de requête (testé sous PgSQL) a obligé Phalcon à créer des objets ResultSet ultérieurs des participants pi
dans les jeux de résultats pour les projets p
.
Vous pouvez toujours le parcourir en utilisant foreach()
mais après tout, je ne suis pas sûr que cela ait réduit le nombre de requêtes finales .
Lancement de $result = $resultSet->toArray()
fait $result['pi']
restez comme Resultset, vous devez donc rester prudent à ce sujet. Vous pouvez le forcer à se vider sous forme de tableaux en définissant des colonnes exactes dans columns()
paramètres. Il a son inconvénient - vous ne profiterez plus de groupBy()
, au moins sur Phalcon 1.3.2 et PHP 5.5.3 je tourne ici.