Sortowanie po polu powiązanego modelu w CakePHP
Jeśli używamy stronicowania (paginate) i chcemy posortować dane po polu z powiązanego modelu musimy to zrobić za pomocą złączenia. Załóżmy, że jesteśmy w kontrolerze dla modelu Modelname.
$this->paginate = array( 'fields' => array('Modelname.*','TabelaJoin.*'), 'joins' => array( array( 'table' => 'nazwa_tabeli_zlaczeniowej', 'alias' => 'TabelaJoin', 'type' => 'INNER', 'conditions' => array( 'TabelaJoin.pole_id = Modelname.id' ), ), array( //tu można zdefiniować kolejne złączenie z inną tabelą ), //itd. ), 'order' => 'TabelaJoin.id DESC' );Przekazanie danych do widoku:
$items = $this->paginate($conditions);//$conditions - jakieś warunki (opcjonalne) $this->set('items', $items);Teraz najważniejsze odpowiednie ustawienie dla sort. Należy pamiętać aby nazwy pól zapisywać w konwencji Nazwamodelu.nazwapola.
<table cellpadding="0" cellspacing="0"> <tr> <th><?php echo $this->Paginator->sort('Modelname.name',__('Name')); ?></th> <th><?php echo $this->Paginator->sort('TabelaJoin.description',__('Description')); ?></th> </tr> <?php foreach ($items as $item): ?> <tr> <td><?php echo h($item['Modelname']['name']); ?> </td> <td><?php echo h($item['TabelaJoin']['description']); ?> </td> </tr>