Files

31 lines
956 B
PHP

<?php
namespace App\Repositories\Admin\Order;
use App\Models\Order;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
class AdminOrderRepository implements AdminOrderRepositoryInterface
{
public function paginate(array $filters, int $perPage): LengthAwarePaginator
{
$query = Order::with('customer')->orderBy('id', 'desc');
if ($filter = $filters['filter'] ?? null) {
$query->where(function ($q) use ($filter) {
$q->where('order_num', 'like', "%{$filter}%")
->orWhereHas('customer', fn($q2) =>
$q2->where('fullname', 'like', "%{$filter}%")
->orWhere('email', 'like', "%{$filter}%")
);
});
}
if (($status = $filters['status'] ?? null) !== null && $status !== '') {
$query->where('status', (int) $status);
}
return $query->paginate($perPage);
}
}