src.where.filtro_extra_sql - gamboamartin/where GitHub Wiki

filtro_extra_sql

La función filtro_extra_sql es una función pública que construye una cláusula SQL adicional combinando múltiples filtros extraídos de un array. Recorre cada filtro, valida su estructura, y lo integra en una cláusula SQL acumulativa.

Signatura

final public function filtro_extra_sql(array $filtro_extra):array|string

Parámetros

  • array $filtro_extra:
    Un array de filtros adicionales, donde cada elemento es un array asociativo que contiene las condiciones necesarias para construir una cláusula SQL. Cada filtro debe incluir claves como operador, valor, y comparacion.

Retorna

  • array|string:
    Retorna una cadena que representa la cláusula SQL completa generada a partir de los filtros adicionales. En caso de error, retorna un array de error generado por $this->error->error().

Explicación Detallada

  1. Inicialización de la cláusula SQL:

    • La función comienza inicializando $filtro_extra_sql como una cadena vacía, que se utilizará para construir la cláusula SQL final.
  2. Iteración sobre los filtros adicionales:

    • La función recorre cada elemento en el array $filtro_extra. Cada elemento debe ser un array que contenga las claves necesarias para construir una condición SQL.
  3. Validación de cada filtro:

    • La función verifica que cada filtro ($data_filtro) sea un array. Si no lo es, se genera un mensaje de error y se retorna un array con el mensaje de error.
  4. Integración del filtro en la cláusula SQL:

    • La función llama a integra_filtro_extra() para validar y combinar cada filtro con la cláusula SQL acumulativa.
    • Si ocurre un error durante este proceso, se genera un mensaje de error y se retorna un array con el mensaje de error.
  5. Retorno de la cláusula SQL completa:

    • Después de procesar todos los filtros, la función retorna la cadena $filtro_extra_sql que contiene todas las condiciones combinadas.

Ejemplos

$filtro_extra = [
    [
        'operador' => '=',
        'valor' => '100',
        'comparacion' => 'AND'
    ],
    [
        'operador' => 'LIKE',
        'valor' => '%producto%',
        'comparacion' => 'AND'
    ]
];

$resultado = $this->filtro_extra_sql($filtro_extra);

// Resultado esperado:
// "campo1='100' AND campo2 LIKE '%producto%'"
// Un array de error si ocurre algún problema.

Código de la Función

final public function filtro_extra_sql(array $filtro_extra):array|string
    {
        $filtro_extra_sql = '';
        foreach($filtro_extra as $data_filtro){
            if(!is_array($data_filtro)){
                return $this->error->error(mensaje: 'Error $data_filtro debe ser un array',data: $filtro_extra,
                    es_final: true);
            }
            $filtro_extra_sql = $this->integra_filtro_extra(
                data_filtro: $data_filtro, filtro_extra_sql: $filtro_extra_sql);
            if(errores::$error){
                return $this->error->error(mensaje: 'Error al generar filtro',data:  $filtro_extra_sql);
            }
        }

        return $filtro_extra_sql;
    }