view src/Traits/Filterable.php @ 1:56d9c64d64aa

Setting up the base, still have plenty of work to be done here.
author luka
date Mon, 09 Jun 2025 23:07:17 -0400
parents
children b44434aaa767
line wrap: on
line source

<?php

namespace Wizard\Framework\Traits;

trait Filterable
{
    protected static $filters = [];

    // End goal: 'column_name' 'operator' 'value'
    // string:   name LIKE '%test%'
    // value:    id = 3
    // date:
    //
    //
    // table
    // column
    // operator ? based on the value?
    // value
    // required joins
    //

    public function scopeFilter($query, $validated)
    {
        $filters = static::$filters;

        foreach ($filters as $key => $filter) {

            if (isset($validated[$key])) {
                if (isset($filter['callback'])) {

                } else {
                    switch ($filter['type']) {
                        case 'value':
                        default:
                            $this->valueFilter($query, $filter, $validated[$key]);
                    }
                }
            }
        }
    }

    public function valueFilter($query, $filter, $value)
    {
        $query->where($filter['table'].'.'.$filter['column_name'], '=', $value);
    }

    // filter for dates
    public function dateFilter() {}
}