2016-05-04 11 views
2

Ich bin neu in Lehre, und ich kann einfach nicht einen Weg finden, mit Begrenzung die Gesamt Anzahl der Ergebnisse zu erhalten, wenn Grenze mit Criteria (via setMaxResults Funktion) unter Verwendung von in den EntityRepository::matching Methode.Lehre 2 - Gesamt wenn über Repository

In meinem Repository (keine extend von EntityRepository) Ich verwende die folgende (ich weiß, dass dies nicht der optimale Code ist, ist es nur Lehre lernen verwendet wird):

public function getAll($query = null) { 
    if ($query instanceof Criteria) { 
     $users = $this->em->getRepository('App\Entities\User')->matching($query)->toArray(); 
    } else { 
     $users = $this->em->getRepository('App\Entities\User')->findAll(); 
    } 
    return $users; 
} 

Jetzt kann sagen dass die Kriterien wie folgt definiert sind:

$query = Criteria::create(); 
$query->where(Criteria::expr()->contains('username', 'ron')); 
$query->setMaxResults(10); 

Und es gibt tatsächlich mehr als 10 Benutzer, die das übereinstimmen.

Wie kann ich die Gesamtzahl der Benutzer ermitteln, die den Kriterien entsprechen?

Antwort

0

Wenn Sie maxResults auf 10 setzen, erhalten Sie 10 Ergebnisse;).

Warum rufen Sie nicht getAll() an, um alle Ergebnisse zu erhalten, und wenden Sie die MaxResults später an?

//search for Ron's 
$query = Criteria::create(); 
$query->where(Criteria::expr()->contains('username', 'ron')); 

//check how many Ron's your database can find 
$count = $repo->getAll($query)->count(); 

//get the first 10 records 
$query->setMaxResults(10); 
$users = $repo->getAll($query); 
+0

Ich habe versucht, es in einer einzigen Abfrage zu tun, aber ich denke, COUNT (*), dass Lehre die erste Abfrage funktioniert wie (ohne Begrenzung) bin nicht schnell genug eine große „Overhead“ Auswirkungen haben. Vielen Dank :) –

Verwandte Themen