Сортировка таблицы - простой вариант Part 1
Отредачено 05.05.2025,
а чекнуто 527 💁
У меня была таблица
<table class="table table-hover">
<thead>
<tr class="fw-bold fs-6 text-gray-800">
<th>ID</th>
<th>Задача</th>
<th>Ответственный</th>
<th>Место</th>
<th>Статус</th>
</tr>
</thead>
@forelse($tasks as $t)
<tr>
<td><a href="{{ route('tasks.edit', $t->id) }}">{{ $t->id }}</a></td>
<td>{{ $t->task }}</td>
<td>{{ $t->employer->last_name }} {{ $t->employer->first_name }}</td>
<td>{{ $t->organization->name }}/{{ $t->building->name }}/{{ $t->room->name }}</td>
<td><span class="badge badge-light-dark">{{ $t->status?->name }}</span></td>
</tr>
@empty
<tr>
<td><h3>Список пуст</h3></td>
</tr>
@endforelse
</table>
По сути - обычная таблица, но для нее нужна сортировка и фильтры, я занялся сортировкой.
И выбрал простой вариант, есть и посложнее.
Для этого устанавливаем пакет:
composer require kyslik/column-sortable
В таблице вносим изменение в thead, сразу скажу что storm так и не определил @sortablelink()
@sortablelink('id', 'ID')@sortablelink('task', 'Задача')@sortablelink('employer.last_name', 'Ответственный')Место@sortablelink('status.name', 'Статус')
В модельке
class Task extends Model
{
use Sortable;
public $sortable = [
'id',
'task'
];
// Добавляем сортируемые отношения (думаю, логика понятна почему и как)
public $sortableAs = [
'employer_last_name' => 'employer.last_name',
'status_name' => 'status.name',
];
// Обязательно нужны отношения
public function employer()
{
return $this->belongsTo(Employer::class);
}
public function status()
{
return $this->belongsTo(Status::class);
}
}
И остается только добавить изменение в контроллер
public function list(): View
{
return view(
'dashboard.admin.' . $this->localName . '.list',
[
'title' => 'Список ' . $this->listName,
$this->localName => $this->model->with(['employer', 'status','organization','room','building'])->sortable()->paginate(15)
]
);
}
Ключевое здесь это - ->sortable(), загрузка отношений, можно через load и ->orderBy() должна быть до -> sortable(), иначе гг
На этом всё
Laravel
Оптимизация
Из реального мира