$query * @param array{username?: string, email?: string, payment_status?: string, invoice_status?: string} $filters * @return Builder */ public function scopeFilter(Builder $query, array $filters): Builder { if (! empty($filters['username'])) { $query->where('username', 'like', '%'.$filters['username'].'%'); } if (! empty($filters['email'])) { $query->where('email', 'like', '%'.$filters['email'].'%'); } if (! empty($filters['payment_status'])) { $query->where('payment_status', $filters['payment_status']); } if (! empty($filters['invoice_status'])) { if ($filters['invoice_status'] === self::INVOICE_STATUS_PENDING) { $query->where(function (Builder $q): void { $q->whereNull('invoice_status') ->orWhere('invoice_status', self::INVOICE_STATUS_PENDING); }); } else { $query->where('invoice_status', $filters['invoice_status']); } } return $query; } }