Skip to content
22 de maio de 2013 / rafaelti

ZF2 paginação no banco de dados

Objetivo

Criar paginação no banco de dados utilizando o Zend Framework 2

Plataforma

PHP e ZF2

Conhecimento

PHP e ZF2

Introdução

Quando as aplicações ficam grandes as requisições aos BDs crescem e devemos refatorar o código para otimizar essas requisições. Uma das atitudes a ser feita é a paginação no BD.

Solução

Para paginar no ZF2 devemos utilizar o método offset da classe Select.

public function fetchAll($offset = -1, $limit = -1, $searchField = '', $searchString = '', $searchOper = '') {
        $select = new \Zend\Db\Sql\Select;
        $select->from($this->tableGateway->table);
        if ($offset >= 0 && $limit >= 0) {
            $select->offset($offset)->limit($limit);
        }
        /*
          odata : ['equal', 'not equal', 'less', 'less or equal', 'greater', 'greater or equal', 'begins with', 'ends with', 'contains'],
          // if you want to change or remove the order change it in sopt
          sopt: null // ['bw','eq','ne','lt','le','gt','ge','ew','cn']
          by default all options are allowed. The codes are as follow:
          bw - begins with ( LIKE val% )
          eq - equal ( = )
          ne - not equal ( <> )
          lt - little ( < )
          le - little or equal ( <= )
          gt - greater ( > )
          ge - greater or equal ( >= )
          ew - ends with (LIKE %val )
          cn - contain (LIKE %val% )
         * 
         */
        if (!is_array($searchField))
            $searchField = array($searchField);

        if (!is_array($searchString))
            $searchString = array($searchString);

        if (!is_array($searchOper))
            $searchOper = array($searchOper);


        for ($i = 0; $i < count($searchField); $i++) {
            if (!Empty($searchField[$i])&& !Empty($searchOper[$i])) {
                //Empty($searchString[$i]) 
                switch ($searchOper[$i]) {
                    case "cn":
                        $select->where->like($searchField[$i], "%$searchString[$i]%");
                        break;
                    case "ge":
                        $select->where->greaterThanOrEqualTo($searchField[$i], $searchString[$i]);
                        break;
                    case "eq":
                        $select->where->equalTo($searchField[$i], $searchString[$i]);
                        break;
                }
            }
        }
        //$sqlString = $select->getSqlString();
        //var_dump($select->getSqlString());

        $resultSet = $this->tableGateway->selectWith($select);
        $resultSet->buffer();
        $resultSet->next();
        return $resultSet;
    }
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: