Сброс номера страницы в Livewire
Пусть человек уже листает дальнюю страницу списка и меняет строку поиска. Под новый запрос старый номер страницы не подходит: список пустеет, хотя подходящие записи есть на первой странице.
Когда меняется строка поиска,
номер страницы нужно вернуть
к началу. Для этого есть метод
resetPage, а Livewire
сам вызовет метод updatedSearch
после смены свойства search.
Пусть в проекте есть модель
Post с полями заголовка
и текста.
Давайте создадим компонент
PostBrowse:
php artisan make:livewire PostBrowse --class
Давайте добавим маршрут и страницу:
<?php
Route::get('/posts', function () {
return view('posts');
});
?>
<x-layout>
<livewire:post-browse />
</x-layout>
Давайте объединим поиск, постраничную выборку и сброс номера в классе:
<?php
namespace App\Livewire;
use App\Models\Post;
use Livewire\Component;
use Livewire\WithPagination;
class PostBrowse extends Component
{
use WithPagination;
public $search = '';
public function updatedSearch()
{
$this->resetPage();
}
public function render()
{
$posts = Post::where(
'title', 'like',
'%' . $this->search . '%'
)
->orderBy('id')
->paginate(2);
return view(
'livewire.post-browse',
compact('posts')
);
}
}
?>
Давайте в шаблоне добавим поле, список и номера страниц:
<div>
<input
type="text"
wire:model.live="search"
>
@foreach ($posts as $post)
<div wire:key="{{ $post->id }}">
{{ $post->title }}
</div>
@endforeach
{{ $posts->links() }}
</div>
Создайте компонент EmployeeBrowse.
Когда меняется имя в поиске,
список работников снова открывается
с первой страницы.