/** * Retorna uma coleção (array) de objetos de Model * * <b>Exemplo de uso:</b> * * $models = Model::getList(); * * @param Criteria $criteria * @return array de Objetos do modelo */ public static function getList(Criteria $criteria = NULL) { $db = new MysqlDB(); $class = get_called_class(); $table = $class::TABLE; $criteriaConfig = $class::configure(); if (empty($criteria) && empty($criteriaConfig)) { $q = "SELECT * FROM {$table}"; $db->query($q); return $db->getResults($class); } if (!empty($criteriaConfig)) { if (empty($criteria)) { $criteria = new Criteria(); } $criteria->merge($criteriaConfig); } $criteria->setTable($table); $q = "SELECT * FROM " . implode(',', $criteria->getTables()); if ($criteria->getConditions()) { $conditions = array(); $q .= ' WHERE ( '; foreach ($criteria->getConditions() as $c) { $label = $c[3]; if (is_array($c)) { $conditions[] = $c[0] . ' ' . $c[1] . ' :' . $label; } else { $conditions[] = $c; } } $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); $used = array(); $i = 2; foreach ($criteria->getConditions() as $c) { if (!is_array($c)) { continue; } $label = $c[3]; while (array_search($label, $used)) { $label .= $i++; } $db->bind(':' . $label, $c[2]); $used[] = $label; } return $db->getResults($class); }