2017-07-05 5 views
1

J'ai un modèle très simple que je veux paginer. La pagination fonctionne, mais les liens de tri n'ont aucun effet:Cake3 Paginator Sort Error

Mon contrôleur:

public $paginate = [ 
     'limit' => 10, 
     'order' => [ 
      'Properties.id' => 'asc' 
     ], 
     'sortWhitelist' => [ 
      'Properties.id', 
      'Properties.name', 
      'Properties.active' 
     ], 
]; 

Ma requête:

$properties = $this->Properties->find('all')->where($options)->contain($contains)->order(['Properties.id']); 

$this->set('properties', $this->paginate($properties)); 

Mon point de vue affiche 10 articles par page et les liens vers des pages/prochain/précédent travail bien. Lorsque je clique sur le lien de tri:

$this->Paginator->sort('id', 'ID') 

L'URL appelé est:

propriétés/index/3 trier = id & direction = desc

La page des rechargements mais l'ordre? des données ne change pas.

Répondre

1

La liste blanche attend le nom de champ exact que vous utilisez dans le tri. Il ne sera pas placé automatiquement le nom de la table primaire, de sorte que votre liste blanche devrait ressembler à ceci:

public $paginate = [ 
    'limit' => 10, 
    'order' => [ 
     'Properties.id' => 'asc' 
    ], 
    'sortWhitelist' => [ 
     'id', 
     'name', 
     'active' 
    ], 
]; 

Il verra « id » dans la requête et vérifiez que le « id » exact nom du champ existe dans la liste blanche. En outre, il semble que vous incluez un order() sur votre requête. Pour permettre au paginateur de définir la commande, vous devez supprimer cette clause.

+0

Oui c'était l'ordre/le type que j'avais ajouté à la requête principale! Bonne leçon apprise aujourd'hui! –