13.13.11 SearchDoc::onlyCount()
13.13.11.1 Description
int onlyCount ()
Cette méthode permet d'avoir uniquement le nombre de documents trouvés par la requête sans pour autant récupérer ces documents de la base de données.
13.13.11.1.1 Avertissements
Un nouvel appel à la base de données est effectué à chaque appel et écrase le
précédent résultat fait par search()
ou le précédent onlyCount
.
13.13.11.2 Liste des paramètres
Aucun.
13.13.11.3 Valeur de retour
int
- Le nombre de documents trouvés par le searchDoc.
Retourne
-1
en cas d'erreur.
13.13.11.4 Erreurs / Exceptions
Exception \Dcp\Db\Exception
en cas d'erreur de requête sql.
13.13.11.5 Historique
13.13.11.5.1 Release 3.2.18
3.2.18
En cas d'erreur SQL de la requête, la méthode lève une exception de type
\Dcp\Db\Exception
.
La valeur -1
est retournée pour toute autre erreur logique (e.g. la famille
sur laquelle porte la recherche n'existe pas).
13.13.11.5.2 Release 3.2.17
En cas d'erreur de requête, la méthode retourne maintenant -1
au lieu de 0
.
13.13.11.5.3 Release 3.2.12
La méthode onlyCount()
récupère toujours le résultat en envoyant une requête
en base de donnée. Auparavant, si la méthode search()
ou onlyCount
étaient préalablement exécutée la méthode ne renvoyait pas de requête mais
récupéré le dernier compte effectué. Il fallait dans ce cas appeler la méthode
reset()
pour forcer un recomptage.
13.13.11.6 Exemples
13.13.11.6.1 Exemple de compte :
function testOnlyCount(Action & $action) { header('Content-Type: text/plain'); $searchDoc = new searchDoc(); var_export($searchDoc->onlyCount()); print "\n"; var_export($searchDoc->getSearchInfo()); print "\n"; print "\n"; $searchDoc->addFilter("title = 'toto'"); var_export($searchDoc->onlyCount()); print "\n"; var_export($searchDoc->getSearchInfo()); print "\n"; print "\n"; $searchDoc = new searchDoc(); $searchDoc->search(); var_export($searchDoc->onlyCount()); print "\n"; var_export($searchDoc->getSearchInfo()); print "\n"; print "\n"; $searchDoc->addFilter("title = 'toto'"); var_export($searchDoc->onlyCount()); print "\n"; var_export($searchDoc->getSearchInfo()); print "\n"; print "\n"; }
1493 array ( 'query' => 'select count(docread.id) from docread where (docread.archiveid is null) and (docread.doctype != \'Z\') and (docread.doctype != \'T\') and (docread.locked != -1)', 'delay' => '0.003s', ) 0 array ( 'query' => 'select count(docread.id) from docread where (docread.archiveid is null) and (docread.doctype != \'Z\') and (docread.doctype != \'T\') and (docread.locked != -1) and (title = \'toto\')', 'delay' => '0.001s', ) 1493 array ( 'count' => 1493, 'query' => 'select docread.id, owner, title, revision, version, initid, fromid, doctype, locked, allocated, archiveid, icon, lmodify, profid, usefor, cdate, adate, revdate, comment, classname, state, wid, postitid, domainid, lockdomainid, cvid, name, dprofid, atags, prelid, confidential, ldapdn, values, svalues, attrids from docread where (docread.archiveid is null) and (docread.doctype != \'Z\') and (docread.doctype != \'T\') and (docread.locked != -1) ORDER BY title LIMIT ALL OFFSET 0;', 'error' => '', 'delay' => '0.073s', ) 1493 array ( 'count' => 1493, 'query' => 'select docread.id, owner, title, revision, version, initid, fromid, doctype, locked, allocated, archiveid, icon, lmodify, profid, usefor, cdate, adate, revdate, comment, classname, state, wid, postitid, domainid, lockdomainid, cvid, name, dprofid, atags, prelid, confidential, ldapdn, values, svalues, attrids from docread where (docread.archiveid is null) and (docread.doctype != \'Z\') and (docread.doctype != \'T\') and (docread.locked != -1) ORDER BY title LIMIT ALL OFFSET 0;', 'error' => '', 'delay' => '0.073s', )
13.13.11.6.2 Exemple traitement d'erreur
$s = new SearchDoc("", "IUSER"); $s->addFilter("myColumn = 3 "); // Ici la colonne n'existe pas dans la famille try { $c = $s->onlyCount(); } catch (\Dcp\Db\Exception $e) { print "SQL error:\n"; print "----------\n"; print_r($s->getSearchInfo()); return; } if ($c === -1) { print "Logical error:\n"; print "--------------\n"; print_r($s->getSearchInfo()); return; } printf("Count = %d\n", $c);
Retour :
SQL error: ---------- Array ( [query] => select count(doc128.id) from doc128 where (doc128.archiveid is null) and (doc128.doctype != 'T') and (doc128.locked != -1) and (myColumn = 3 ) [error] => ERROR: column "mycolumn" does not exist LINE 1: ...28.doctype != 'T') and (doc128.locked != -1) and (myColumn =... ^ )
13.13.11.7 Notes
Aucune.