Ejemplo n.º 1
0
 /**
  * Recupera uma lista de itens
  * 
  * Permite tambem que sejam passados parametros adicionais,
  * onde o usuario praticamente pode fazer qualquer operacao,
  * como se estivesse trabalhando com os DAO's diretamente.
  * 
  * Exemplode uso:
  * 
  * <code>
  * # preferencias de pesquisa
  * $prefs = array(
  *   # clausula having
  *   'having' => 'contador > 10',
  *   # adiciona campos a selecao
  *   'selectAdd' => 'count(idpessoa) as contador',
  *   # seleciona SOMENTE os campos abaixo
  *   'select' => 'c.campo1, c.campo2, p.campo1',
  *   # agrupamento
  *   'group' => 'c.idcategoria',
  *   # join
  *   'join' => array(
  *   	array(
  *        'class'=>'Categoria', # obrigatorio
  *        'alias'=>'c',         # opcional, mas altamente recomendado
  *        'type'=>'inner',      # obrigatorio
  *        'fieldFrom'=>'idCategoria',  # opcional
  *        'fieldTo'=>'idCategoria',    # opcional
  *        'extra' => 'c.status = ?', #opcional
  *        'extraArgs' => array(1)    # opcional, utilizado em conjunto com o "extra",
  *      ),
  *    ), 
  *      
  *    'whereFilters' => array(   # opcional, utilizado para alterar como os filtros where se comportam
  *			'o.idendereco' => ' > ?',
  * 			'o.logradouro' => ' like ?',
  *			'l.numero' => ' in (?)'
  *    ),
  *      
  *    'whereExtra' => 'o.condicao > ?', # opcional
  *    'whereExtraArgs' => array(1000)   # opcional
  * );
  * 
  * $filtros['p.nome'] = 'hugo';
  * $filtros['c.idCategoria'] = 1;
  * $orderBy = 'p.nome asc, c.nome asc';
  * $offset = 0;
  * $limit = 20;
  * 
  * $results = PessoaModel::getInstance($filtros, $orderBy, $offset, $limit, $prefs);
  * 
  * </code>
  * 
  * @author Hugo Ferreira da Silva
  * @link http://www.hufersil.com.br
  * @param array $filters Filtros a serem usados
  * @param string $order Ordenacao dos resultados
  * @param int $offset Inicio dos resultados
  * @param int $limit Limite de itens
  * @param array $prefs Preferencias para busca
  * @return array Lista de itens encontrados
  */
 public function find(array $filters = array(), $order = '', $offset = null, $limit = null, array $prefs = array())
 {
     $this->obj->reset();
     $this->obj->alias('o');
     $this->obj->selectAs();
     // se indicou uma lista de join's
     if (isset($prefs['join']) && is_array($prefs['join'])) {
         // para cada item
         foreach ($prefs['join'] as $item) {
             // faz o join
             $this->makeJoins($this->obj, $item);
         }
     }
     $this->setFilters($filters, array_key_exists('whereFilters', $prefs) ? $prefs['whereFilters'] : array());
     // se definiu um whereExtra
     if (array_key_exists('whereExtra', $prefs) && !empty($prefs['whereExtra'])) {
         // se definiu argumentos extra
         if (array_key_exists('whereExtraArgs', $prefs) && !empty($prefs['whereExtraArgs'])) {
             // cria a listagem de argumentos em conjunto com o extra
             $args = array($prefs['whereExtra']);
             $args = array_merge($args, $prefs['whereExtraArgs']);
             // chama o metodo where por reflexao
             $method = new ReflectionMethod($this->obj, 'where');
             $method->invokeArgs($this->obj, $args);
             // se nao definiu valores extras
         } else {
             $this->obj->where($prefs['whereExtra']);
         }
     }
     // conta os registros
     $this->rows = $this->obj->count(isset($prefs['countString']) ? $prefs['countString'] : '*');
     // se informou o having
     if (isset($prefs['having'])) {
         $this->obj->having($prefs['having']);
     }
     // se informou group by
     if (isset($prefs['group'])) {
         $this->obj->group($prefs['group']);
     }
     // se informou select
     if (isset($prefs['select'])) {
         // se for um array
         if (is_array($prefs['select'])) {
             // une as colunas
             $this->obj->select(implode(', ', $prefs['select']));
             // se for string
         } else {
             if (is_string($prefs['select'])) {
                 $this->obj->select($prefs['select']);
             }
         }
     }
     // se informou uma ordem
     if (!empty($order)) {
         $this->obj->order($order);
     }
     // limita e executa a consulta
     $this->obj->limit($offset, $limit)->find();
     return $this->obj->allToArray();
 }
Ejemplo n.º 2
0
 /**
  * Exibe os resultados de uma consulta em uma tabela HTML
  *
  * @author Hugo Ferreira da Silva
  * @link http://www.hufersil.com.br/
  * @param Lumine_Base $obj
  * @return void
  */
 public static function showResult(Lumine_Base $obj)
 {
     $sql = $obj->_getSQL();
     $resultset = $obj->allToArray();
     if (!empty($resultset)) {
         $header = $resultset[0];
         $style = ' style="font-family:Verdana, Arial, Helvetica, sans-serif; font-size:9px" ';
         echo '<table cellpadding="2" cellspacing="1" width="100%">';
         echo '<tr>';
         echo '<tr>' . PHP_EOL;
         echo '<td ' . $style . ' colspan="' . count($header) . '">' . $sql . '</td>' . PHP_EOL;
         echo '</tr>' . PHP_EOL;
         foreach ($header as $key => $value) {
             echo '<td' . $style . ' bgcolor="#CCCCCC">' . $key . '</td>' . PHP_EOL;
         }
         echo '</tr>';
         for ($i = 0; $i < count($resultset); $i++) {
             $row = $resultset[$i];
             $cor = $i % 2 != 0 ? '#EFEFEF' : '#FFFFFF';
             echo '<tr>';
             foreach ($row as $value) {
                 echo '<td' . $style . ' bgcolor="' . $cor . '">' . $value . '</td>' . PHP_EOL;
             }
             echo '</tr>';
         }
         echo '</table>';
     } else {
         Lumine_Log::warning('Nenhum resultado encontrado no objeto passado: ' . get_class($obj));
     }
 }