administrador.base.orm.where.verifica_where - gamboamartin/administrador GitHub Wiki

verifica_where

La función verifica_where valida la correcta aplicación de una cláusula where en un objeto stdClass llamado $complemento. Si la propiedad where no está definida o está vacía, no se realizan más comprobaciones. Si la propiedad where tiene un valor, la función verifica que al menos uno de los filtros especificados en el array $key_data_filter no esté vacío. Si todos los filtros están vacíos y existe una cláusula where, la función devuelve un error.

Signatura

private function verifica_where(stdClass $complemento, array $key_data_filter): bool|array

Parámetros

stdClass $complemento

  • Tipo: stdClass
  • Descripción: Un objeto que contiene la propiedad where y otras claves que deben ser validadas. La función valida si, cuando existe una cláusula where, hay al menos un filtro con contenido.

array $key_data_filter

  • Tipo: array
  • Descripción: Un array de claves que deben ser verificadas en el objeto $complemento. La función asegura que, si where no está vacío, al menos una de estas claves tenga un valor no vacío.

Retorno

bool|array

  • Tipo: bool o array
  • Descripción:
    • Devuelve true si la validación es exitosa, es decir, si la cláusula where está correctamente aplicada y al menos uno de los filtros no está vacío.
    • Si ocurre un error en el proceso de validación o si hay una cláusula where pero todos los filtros están vacíos, la función devuelve un array con un mensaje de error y los detalles del problema.

Explicación Detallada

  1. Inicialización de la propiedad where:

    • Si la propiedad where no está definida en el objeto $complemento, se inicializa con una cadena vacía ('').
  2. Verificación de la existencia de filtros cuando where está presente:

    • Si la propiedad where no está vacía, la función llama a filtros_vacios para verificar si todos los filtros especificados en $key_data_filter están vacíos.
    • Si filtros_vacios devuelve true (es decir, todos los filtros están vacíos), y where no está vacío, la función genera un error indicando que debe haber al menos un filtro si existe una cláusula where.
  3. Manejo de errores:

    • Si se produce un error durante la verificación de los filtros, la función devuelve un array con un mensaje de error y los detalles correspondientes.

Ejemplos

$complemento = new stdClass();
$complemento->where = "WHERE id = 1";
$complemento->nombre = "  ";  // filtro vacío
$complemento->edad = "";  // filtro vacío

$keys_data_filter = ['nombre', 'edad'];

$resultado = $this->verifica_where($complemento, $keys_data_filter);

// Resultado esperado: Error, ya que existe un WHERE pero todos los filtros están vacíos.

Código de la Función

private function verifica_where(stdClass $complemento, array $key_data_filter): bool|array
    {
        if(!isset($complemento->where)){
            $complemento->where = '';
        }
        if($complemento->where!==''){
            $filtros_vacios = $this->filtros_vacios(complemento: $complemento, keys_data_filter: $key_data_filter);
            if(errores::$error){
                return $this->error->error(mensaje: 'Error validar filtros',data: $filtros_vacios);
            }
            if($filtros_vacios){
                return $this->error->error(mensaje: 'Error si existe where debe haber al menos un filtro',
                    data: $complemento, es_final: true);
            }
        }
        return true;
    }