Example #1
0
 /**
  * Retorna a quantidade de registro existentes
  * 
  * @param Criteria $criteria
  * @return int $n NĂºmero de linhas
  */
 public static function count(Criteria $criteria = NULL)
 {
     $db = new MysqlDB();
     $class = get_called_class();
     $table = $class::TABLE;
     $q = "SELECT count(*) as count FROM {$table}";
     $criteriaConfig = $class::configure();
     if (empty($criteria) && empty($criteriaConfig)) {
         $db->query($q);
         return $db->getRow()->count;
     }
     if (!empty($criteriaConfig)) {
         if (empty($criteria)) {
             $criteria = new Criteria();
         }
         $criteria->merge($criteriaConfig);
     }
     if ($criteria->getConditions()) {
         $conditions = array();
         $used = array();
         $i = 2;
         $q .= ' WHERE (';
         foreach ($criteria->getConditions() as $c) {
             $label = $c[3];
             while (array_search($label, $used)) {
                 $label .= $i++;
             }
             if (is_array($c)) {
                 $conditions[] = $c[0] . ' ' . $c[1] . ' :' . $label;
             } else {
                 $conditions[] = $c;
             }
             $used[] = $label;
         }
         $q .= implode(' AND ', $conditions) . ')';
         $q = str_replace('AND ) OR ( AND', ') OR (', $q);
         if ($criteria->getSqlConditions()) {
             $q .= ' AND ' . $criteria->getSqlConditions();
         }
     } elseif ($criteria->getSqlConditions()) {
         $q .= ' WHERE ' . $criteria->getSqlConditions();
     }
     if ($criteria->getOrder()) {
         $q .= ' ORDER BY ' . $criteria->getOrder();
     }
     if ($criteria->getLimit()) {
         $q .= ' LIMIT ' . $criteria->getLimit();
     }
     $db->query($q);
     foreach ($criteria->getConditions() as $c) {
         if (!is_array($c)) {
             continue;
         }
         $db->bind(':' . $c[3], $c[2]);
     }
     return $db->getRow()->count;
 }