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']); ?>&nbsp;</td>
		<td><?php echo h($item['TabelaJoin']['description']); ?>&nbsp;</td>
	</tr>