diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Traits/Filterable.php	Mon Jun 09 23:07:17 2025 -0400
@@ -0,0 +1,49 @@
+<?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() {}
+}