Personal Website
PHP

Laravel Query Scope untuk Filter

Laravel Query Scope untuk Filter

PHP
#laravel #eloquent #filter #scope

Pattern reusable query scope untuk filter data berdasarkan request parameter.

<?php

// Di Model
class Product extends Model
{
    public function scopeFilter(Builder $query, array $filters): Builder
    {
        return $query
            ->when($filters['search'] ?? null, function ($q, $search) {
                $q->where(function ($q) use ($search) {
                    $q->where('name', 'like', "%{$search}%")
                      ->orWhere('description', 'like', "%{$search}%");
                });
            })
            ->when($filters['category'] ?? null, fn ($q, $cat) => $q->where('category_id', $cat))
            ->when($filters['min_price'] ?? null, fn ($q, $min) => $q->where('price', '>=', $min))
            ->when($filters['max_price'] ?? null, fn ($q, $max) => $q->where('price', '<=', $max))
            ->when($filters['sort'] ?? null, function ($q, $sort) {
                match ($sort) {
                    'price_asc' => $q->orderBy('price'),
                    'price_desc' => $q->orderByDesc('price'),
                    'newest' => $q->latest(),
                    default => $q->orderBy('name'),
                };
            });
    }
}

// Di Controller
$products = Product::filter($request->only(['search', 'category', 'min_price', 'max_price', 'sort']))
    ->paginate(15);
236 views 18 copies 12 jam yang lalu

Lainnya PHP

Chat via WhatsApp
Tidak ada lagu