Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Phalcon-leistungsbezogene Abfragen

Um mit QueryBuilder auf die gleiche Weise auf ->Teilnehmer zuzugreifen, müssen Sie Join in Query einbauen.

Codebeispiel könnte etwa so aussehen:

$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 wird hier verwendet, um das Ergebnis möglichst mehrdimensional zu machen.

Diese Art von Abfrage (getestet unter PgSQL) veranlasste Phalcon, einige nachfolgende ResultSet-Objekte der Teilnehmer pi zu erstellen in Resultsets für Projekte p .

Sie können es immer noch durchlaufen, indem Sie foreach() verwenden aber Ich bin mir nicht sicher, ob es die Anzahl der letzten Abfragen reduziert hat .

Auslösen von $result = $resultSet->toArray() $result['pi'] erstellt bleiben als Resultset, also sollten Sie diesbezüglich vorsichtig bleiben. Sie können erzwingen, dass es als Array ausgegeben wird, indem Sie exakte Spalten in columns() definieren Parameter. Es hat seine Kehrseite - Sie profitieren nicht mehr von groupBy() , zumindest auf Phalcon 1.3.2 und hier läuft PHP 5.5.3.