Para acessar ->participantes da mesma forma usando o QueryBuilder, você terá que construir join no Query.
O exemplo de código poderia ser algo como:
$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 é usado aqui para tornar o resultado possivelmente multidimensional. Esse tipo de consulta (testada em PgSQL) fez com que Phalcon criasse alguns objetos ResultSet subsequentes de participantes
pi
dentro de conjuntos de resultados para projetos p
. Você ainda pode iterar usando
foreach()
mas, afinal, não tenho certeza se isso reduziu a contagem final de consultas . Disparando
$result = $resultSet->toArray()
feito $result['pi']
permanecer como conjunto de resultados, então você deve ficar cauteloso sobre isso. Você pode forçar o dump como arrays definindo colunas exatas em columns()
parâmetros. Tem sua desvantagem - você não lucrará mais com groupBy()
, pelo menos no Phalcon 1.3.2 e PHP 5.5.3 estou rodando aqui.