/** * 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; }