Example #1
0
 /**
  * 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);
 }