take(5) ->get(); return response()->json($persons); } public function process_rule($query,$rules,$condition) { $where = null; $count = 0; foreach ($rules as $rule) { if(array_key_exists("condition",$rule)) { $where = function ($q) use ($rule) { $this->process_rule($q,$rule["rules"],$rule["condition"]); }; } else { switch ($rule["operator"]) { case "=": $where = [[ $rule["id"], '=', $rule["value"] ]]; break; case "(": $where = [[ $rule["id"], 'LIKE', $rule["value"]."%" ]]; break; case "!=": $where = [[ $rule["id"], '!=', $rule["value"]]]; break; case ")": $where = [[ $rule["id"], 'LIKE', "%".$rule["value"] ]]; break; } } if ($query != null) { switch ($condition) { case "and": $query->where($where); break; case "or": $count == 0 ? $query->where($where) : $query->orWhere($where); } } else { $query = Person::where($where); } $count++; } return $query; } public function search(Request $request) { $query = $request->post(); $currentQuery = $query; $condition = $currentQuery["condition"]; $qr = $this->process_rule(null,$currentQuery["rules"],$condition); if ($qr) $result = $qr->paginate(2); else $result = []; return Inertia::render( 'Rpo/Results', [ 'result' => $result, 'query' => $query, ] ); } }