Yii2 framework backup
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

4.5 KiB

Ordenação

Ao exibir várias linhas de dados, muitas vezes é necessário que os dados sejam ordenados de acordo com algumas colunas especificadas pelos usuários finais. O Yii utiliza um objeto yii\data\Sort para representar as informações sobre um esquema de ordenação. Em particular,

Para usar yii\data\Sort, primeiro declare quais atributos podem ser ordenados. Em seguida, pegue a requisição com as informações de ordenação através de yii\data\Sort::$attributeOrders ou yii\data\Sort::$orders E use-os para personalizar a consulta de dados. Por exemplo:

use yii\data\Sort;

$sort = new Sort([
    'attributes' => [
        'age',
        'name' => [
            'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC],
            'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC],
            'default' => SORT_DESC,
            'label' => 'Name',
        ],
    ],
]);

$articles = Article::find()
    ->where(['status' => 1])
    ->orderBy($sort->orders)
    ->all();

No exemplo abaixo, dois atributos são declarados para o objeto yii\data\Sort: age e name.

O atributo age é um atributo simples que corresponde ao atributo age da classe Active Record Article. É equivalente a seguinte declaração:

'age' => [
    'asc' => ['age' => SORT_ASC],
    'desc' => ['age' => SORT_DESC],
    'default' => SORT_ASC,
    'label' => Inflector::camel2words('age'),
]

O atributo name é um atributo composto definido por first_name e last_name de Article. Declara-se com a seguinte estrutura de array:

  • Os elementos asc e desc determina a direção da ordenação dos atributos em ascendente ou descendente respectivamente. Seus valores representam as colunas e as direções pelas quais os dados devem ser classificados. Você pode especificar uma ou várias colunas para indicar uma ordenação simples ou composta.
  • O elemento default especifica a direção pela qual o atributo deve ser ordenado quando requisitado. O padrão é a ordem crescente, ou seja, se a ordenação não for definida previamente e você pedir para ordenar por esse atributo, os dados serão ordenados por esse atributo em ordem crescente.
  • O elemento label especifica o rótulo deve ser usado quando executar yii\data\Sort::link() para criar um link de ordenação. Se não for definida, yii\helpers\Inflector::camel2words() será chamado para gerar um rótulo do nome do atributo. Perceba que não será HTML-encoded.

Observação: Você pode alimentar diretamente o valor de yii\data\Sort::$orders para a consulta do banco de dados para implementar a sua cláusula ORDER BY. Não utilize yii\data\Sort::$attributeOrders porque alguns dos atributos podem ser compostos e não podem ser reconhecidos pela consulta do banco de dados.

Você pode chamar yii\data\Sort::link() para gerar um hyperlink em que os usuários finais podem clicar para solicitar a ordenação dos dados pelo atributo especificado. Você também pode chamar yii\data\Sort::createUrl() para criar um URL ordenáveis. Por exemplo:

// especifica a rota que a URL a ser criada deve usar
// Se você não especificar isso, a atual rota requisitada será utilizada 
$sort->route = 'article/index';

// exibe links direcionando a ordenação por ‘name‘ e ‘age‘, respectivamente
echo $sort->link('name') . ' | ' . $sort->link('age');

// exibe: /index.php?r=article/index&sort=age
echo $sort->createUrl('age');

O yii\data\Sort verifica o parâmetro sort da consulta para determinar quais atributos estão sendo requisitados para ordenação. Você pode especificar uma ordenação padrão através de yii\data\Sort::defaultOrder quando o parâmetro de consulta não está fornecido. Você também pode personalizar o nome do parâmetro de consulta configurando propriedade yii\data\Sort::sortParam.