Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fabio.aurelio

Ordernação por campo nome - forreach

Recommended Posts

Ola pessoal,

 

Estou com um problema e apos pesquisar , gostaria de saber se voce tem alguma dica:

 

tenho o seguinte trecho de um codigo que ordenar por ID

$funcionarios = Funcionario::$dao->query()->all();
..
..
arsort($funcionarios);
foreach($empresas as $empresa)

O trecho acima me mostra uma listagem ordenada por ID, mas preciso que mostre em ordem alfabetica pelo campo nome

 

Voces tem alguma ideia de como corrigir isso?

 

Grato

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Marcos, blz?

Então, quando eu uso sort ele teima em ordenar pela ID. No Order by da query, deixei sem nada, mas quando coloco da seguinte maneira

order by nome 

Ele simplesmente ignora

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simplesmente ignora?

Acho difícil. É mais provável que a query que está sendo executada não está sendo montada direito.

 

Veja se os campos possuem valor e se a consulta está sendo feita corretamente.

Coloque em um post aqui no forum a consulta que está sendo executada (a SQL gerada pela sua chamada ali em Funcionario::$dao->query()->all() )

 

E sort e arsort não resolveria mesmo, pois eles são baseados em array simples, e não associativos multimensionais (como provavelmente deve ser o seu, já que é representação de um resultset). Para ordenar por "colunas" no PHP, deveria ser array_multisort ou fazer uma implementação sua utilizando sort/arsort (inútil na minha opinião, já que existe uma nativa). Veja esta tabela de comparação de funções para ordenar arrays.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Tenta usando:

order by nome asc
//ou
order by nome desc

Faça isso e comente a linha

arsort($funcionarios);

 

Desta forma, nao funcionou marcos:

 

 

Simplesmente ignora?

Acho difícil. É mais provável que a query que está sendo executada não está sendo montada direito.

 

Veja se os campos possuem valor e se a consulta está sendo feita corretamente.

Coloque em um post aqui no forum a consulta que está sendo executada (a SQL gerada pela sua chamada ali em Funcionario::$dao->query()->all() )

 

E sort e arsort não resolveria mesmo, pois eles são baseados em array simples, e não associativos multimensionais (como provavelmente deve ser o seu, já que é representação de um resultset). Para ordenar por "colunas" no PHP, deveria ser array_multisort ou fazer uma implementação sua utilizando sort/arsort (inútil na minha opinião, já que existe uma nativa). Veja esta tabela de comparação de funções para ordenar arrays.

 

[]'s

 

Segue abaixo trecho da montagem da Query

public function order($order) {
        $this->order = $order;
        return $this;
    }

    public function toSQL() {
        $sql = "
            SELECT
                ".implode(', ', $this->dao->fields)."
            FROM
                {$this->dao->tableName}
        ";
        $whereList = array();
        $paramArray = array();
        $paramCount = 0;

        foreach($this->conditions as $cond) {
            $key = $cond[0];
            $value = $cond[1];
            $paramName = 'param'.(++$paramCount);
            if(is_array($value)) {
                $op = $value[0];
                $val = $value[1];

                if(is_array($val))
                {
                    $val = '('.implode(', ', $val).')';
                    $whereList[] = "$key $op $val";
                }
                else
                {
                    $whereList[] = "$key $op :$paramName";
                    $paramArray[$paramName] = $val;
                }
            } else {
                $whereList[] = "$key = :$paramName";
                $paramArray[$paramName] = $value;
            }
        }

        foreach($this->sqlConditions as $sqlCond) {
            $str = $sqlCond[0];
            $par = $sqlCond[1];

            $whereList[] = $str;
            foreach($par as $key => $value)
                $paramArray[$key] = $value;
        }

        if($whereList)
        {
            $sql .= " WHERE ".implode(' AND ', $whereList);
        }

        if($this->order)
        {
            $sql .= " ORDER BY nome asc ".$this->order; /*  Aqui o trecho do order */
        }
...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Fabio,

 

Você postou o código que gera a SQL, mas precisamos ver a SQL gerada, sacou?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, fera. O SQL que é executado no banco...

SELECT pirulito FROM caixa_de_fosforo

Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta isso

$funcionarios = Funcionario::$dao->query()->order('nome asc')->all();

e veja como a sql é montada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tentou comentando como no trecho abaixo?

if($whereList)
{
$sql .= " WHERE ".implode(' AND ', $whereList);
}
//if($this->order)
//{
$sql .= " ORDER BY nome asc ";//.$this->order; 
//}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem que ver o funcionamento da sua classe.

O que o metodo query faz?

Tente colocar o order antes do query.

$funcionarios = Funcionario::$dao->order('nome asc')->query()->all();

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Tem que ver o funcionamento da sua classe.

O que o metodo query faz?

Tente colocar o order antes do query.

$funcionarios = Funcionario::$dao->order('nome asc')->query()->all();

 

Da o seguinte erro:

Fatal error: Call to undefined method UsuarioDao

É que sao varias classes, senao tem enviada por mp pra vc dar uma olhada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, eu não respondo por mp.

Coloque os arquivos em uma area para download que daeh todos podem dar uma olhada e te ajudar mais brevemente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.