when($tableQuery['search'] !== '', function (Builder $query) use ($tableQuery): void { $search = $tableQuery['search']; $query->where(function (Builder $query) use ($search): void { $query->where('name', 'like', "%{$search}%") ->orWhere('phone_number', 'like', "%{$search}%") ->orWhere('address', 'like', "%{$search}%"); }); }); $this->applySorting($query, $tableQuery['sort'], $tableQuery['direction']); return $query ->paginate(10) ->withQueryString(); } /** * @param array $validated */ public function create(array $validated): void { Supplier::create($validated); } /** * @param array $validated */ public function update(Supplier $supplier, array $validated): void { $supplier->fill($validated)->save(); } public function delete(Supplier $supplier): void { $supplier->delete(); } private function applySorting(Builder $query, string $sort, string $direction): void { if (in_array($sort, ['name', 'phone_number', 'address'], true)) { $query->orderBy($sort, $direction); return; } $query->latest(); } }