code: protected function getFilterColumns(string $filterFieldName, array $listViewColumns): ?array
      {
          $filterColumnsInfo = [];
          $filterParts = explode(",", $this->requestInput[$filterFieldName]);
          if (mb_strlen($filterParts[0]) == 0) {
              FormHelper::setFieldErrors([$filterFieldName => 'Not Entered']);
              return null;
          } else {
  
              foreach ($filterParts as $whereFieldOperatorValue) {
                  //field:operator:value
                  $whereFieldOperatorValueParts = explode(":", $whereFieldOperatorValue);
                  if (count($whereFieldOperatorValueParts) != 3) {
                      FormHelper::setFieldErrors([$filterFieldName => 'Malformed']);
                      return null;
                  }
                  $columnName = trim($whereFieldOperatorValueParts[0]);
                  $whereOperator = strtoupper(trim($whereFieldOperatorValueParts[1]));
                  $whereValue = trim($whereFieldOperatorValueParts[2]);
  
                  // validate the column name
                  if (isset($listViewColumns[strtolower($columnName)])) {
                      $columnNameSql = $listViewColumns[strtolower($columnName)];
                  } else {
                      FormHelper::setFieldErrors([$filterFieldName => "$columnName column not found"]);
                      return null;
                  }
  
                  // validate the operator
                  if (!QueryBuilder::validateWhereOperator($whereOperator)) {
                      FormHelper::setFieldErrors([$filterFieldName => "Invalid Operator $whereOperator"]);
                      return null;
                  }
  
                  // null value only valid with IS and IS NOT operators
                  if (strtolower($whereValue) == 'null') {
                      if ($whereOperator != 'IS' && $whereOperator != 'IS NOT') {
                          FormHelper::setFieldErrors([$filterFieldName => "Mismatched null, $whereOperator"]);
                          return null;
                      }
                      $whereValue = null;
                  }
  
                  if (!isset($filterColumnsInfo[$columnNameSql])) {
                      $filterColumnsInfo[$columnNameSql] = [];
                      $filterColumnsInfo[$columnNameSql]['operators'] = [];
                      $filterColumnsInfo[$columnNameSql]['values'] = [];
                  }
                  $filterColumnsInfo[$columnNameSql]['operators'][] = $whereOperator;
                  $filterColumnsInfo[$columnNameSql]['values'][] = $whereValue;
              }
          }
  
          return $filterColumnsInfo;
      }
docs: parse the where filter field into [ column name => [operators, values] ]