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']); }