CakePHP 3 poprzedni następny rekord
W CakePHP 2 była przydatna funkcja o nazwie "neighbors", w której można po prostu zażądać sąsiednich rekordów (poprzedniego i następnego). Nie ma tego w CakePHP 3, prawdopodobnie ze względu na ograniczone wykorzystanie takiej funkcji, jednak w przypadku niestandardowych wyszukiwaczy (finderów) można samemu zaimplementować tę funkcjonalność. W pliku src/Models/Table/UsersTable.php dodaj własną funkcję findera.
public function findNeighbors(Query $query, array $options)
{
$id = $options['id'];
$previous = $this->find()
->select('id')
->order(['id' => 'DESC'])
->where(['id <' => $id])
->first();
$next = $this->find()
->select('id')
->order(['id' => 'ASC'])
->where(['id >' => $id])
->first();
return ['prev' => $previous, 'next' => $next];
}
Potem można wywołać tę funkcję w kontrolerze.
public function view($id = null)
{
$neighbors = $this->Users->find('neighbors', ['id' => $user->id]);
$this->set(compact('user', 'neighbors'));
}
Pozostało już tylko użycie w widoku.
if ($neighbors['prev']['id']) {
echo $this->Html->link('Prev', ['action' => 'view', $neighbors['prev']['id']], ['class' => 'button']);
}
if ($neighbors['next']['id']) {
echo $this->Html->link('Next', ['action' => 'view', $neighbors['next']['id']], ['class' => 'button']);
}
