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>
