PHP code example of aldemeery / sieve

1. Go to this page and download the library: Download aldemeery/sieve library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

aldemeery / sieve example snippets


public function index(Request $request)
{
    $query = Product::query();

    if ($request->has('color')) {
        $query->where('color', $request->get('color'));
    }

    if ($request->has('condition')) {
        $query->where('condition', $request->get('condition'));
    }

    if ($request->has('price')) {
        $direction = $request->get('price') === 'highest' ? 'desc' : 'asc';
        $query->orderBy('price', $direction);
    }

    return $query->get();
}

public function index(Request $request)
{
    return Product::filter($request->query())->get();
}

use Aldemeery\Sieve\Concerns\Filterable;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use Filterable;

    // ...
}

public function index(Request $request)
{
    return Product::filter($request->query())->get();
}



namespace App\Filters\Product;

use Aldemeery\Sieve\Contracts\Filter;
use Illuminate\Database\Eloquent\Builder;

/** @implements Filter<\App\Models\Product> */
class ColorFilter implements Filter
{
    public function map(mixed $value): mixed
    {
        return match ($value) {
            default => $value,
        };
    }

    public function apply(Builder $query, mixed $value): void
    {
        // $query->where('id', $value);
    }
}

public function map(mixed $value): mixed
{
    return match ($value) {
        'yes' => true,
        'no' => false,
        '1' => true,
        '0' => true,
        default => $value,
    };
}

public function apply(Builder $query, mixed $value): void
{
    // Assuming filter was called like this: Product::filter(['in_stock' => 'yes'])->get();
    // Or like this: Product::filter(['in_stock' => '1'])->get();
    // In both cases, $value would be `true`

    $query->where('in_stock', $value);
}

public function apply(Builder $query, mixed $value): void
{
    $query->orderBy('price', $value);
}

public function apply(Builder $query, mixed $value): void
{
    $query->whereHas('category', function($query) use ($value): void {
        $query->where('name', $value);
    });
}

public function index(Request $request)
{
    return Product::filter($request->query(), [
        // "color" here is the key to be used in the query string
        // e.g. https://example.com/products?color=red
        "color" => \App\Filters\Product\ColorFilter::class,
    ])->get();
}



namespace App\Models;

use Aldemeery\Sieve\Concerns\Filterable;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use Filterable;

    /** @return array<string, string> */
    private function filters(): array
    {
        return [
            'color' => \App\Filters\Product\ColorFilter::class,
        ];
    }
}

public function index(Request $request)
{
    // The `ColorFilter` filter is applied.
    return Product::filter($request->query())->get();
}



namespace App\Filters\Product;

use Aldemeery\Sieve\Contracts\Filter;
use Illuminate\Database\Eloquent\Builder;

/** @implements Filter<\App\Models\Product> */
class PriceFilter implements Filter
{
    public function map(mixed $value): mixed
    {
        return match ($value) {
            'lowest' => 'asc',
            'highest' => 'desc',
            default => $value,
        };
    }

    public function apply(Builder $query, mixed $value): void
    {
        // After mapping, $value will be 'asc' for 'lowest' and 'desc' for 'highest'.
        $query->orderBy('price', $value);
    }
}