administrador.base.orm.filtros.consulta_full_and - gamboamartin/administrador GitHub Wiki

consulta_full_and

La función consulta_full_and genera una consulta SQL completa utilizando un objeto stdClass llamado $complemento, una consulta base en forma de cadena, y un objeto modelo. La función primero valida que la consulta base no esté vacía, luego inicializa el complemento con los filtros y parámetros necesarios, y finalmente construye la consulta SQL completa. Si ocurre algún error en cualquier parte del proceso, devuelve un array con los detalles del error.

Signatura

final public function consulta_full_and(stdClass $complemento, string $consulta, modelo $modelo): string|array

Parámetros

stdClass $complemento

  • Tipo: stdClass
  • Descripción: Un objeto que contiene los filtros, cláusulas y parámetros que serán utilizados para construir la consulta SQL.

string $consulta

  • Tipo: string
  • Descripción: La consulta SQL base a la cual se le agregarán los filtros y demás cláusulas del objeto $complemento. La cadena no puede estar vacía.

modelo $modelo

  • Tipo: modelo
  • Descripción: Un objeto de tipo modelo que almacena la consulta generada. Contiene columnas y claves necesarias para el procesamiento del complemento.

Retorno

string|array

  • Tipo: string o array
  • Descripción:
    • Si la operación es exitosa, devuelve la consulta SQL completa como una cadena.
    • Si ocurre algún error durante el proceso, devuelve un array con un mensaje de error y los detalles correspondientes.

Explicación Detallada

  1. Validación de la consulta base:

    • La función comienza validando que la consulta base $consulta no esté vacía. Si la consulta es una cadena vacía, se devuelve un error.
    $consulta = trim($consulta);
    if ($consulta === '') {
        return $this->error->error(mensaje: 'Error $consulta no puede venir vacia', data: $consulta, es_final: true);
    }
    
  2. Inicialización del complemento:

    • La función llama a complemento para inicializar y procesar el objeto $complemento utilizando las columnas y claves proporcionadas por el objeto $modelo. Si ocurre algún error durante este paso, se captura y se devuelve un mensaje de error.
    $complemento_r = $this->complemento(complemento: $complemento, modelo: $modelo);
    if (errores::$error) {
        return $this->error->error(mensaje: 'Error al inicializar complemento', data: $complemento_r);
    }
    
  3. Generación de la consulta SQL:

    • Una vez que el complemento ha sido inicializado, la función llama a sql para construir la consulta SQL completa a partir de la consulta base $consulta y el objeto $complemento_r. Si ocurre algún error durante este proceso, se captura y se devuelve un mensaje de error.
    $sql = $this->sql(complemento: $complemento_r, consulta_previa: $consulta);
    if (errores::$error) {
        return $this->error->error(mensaje: 'Error al generar sql', data: $sql);
    }
    
  4. Almacenamiento y retorno de la consulta:

    • La consulta SQL generada se almacena en el objeto $modelo en la propiedad consulta. Luego, la consulta es retornada.
    $sql = trim($sql);
    $modelo->consulta = $sql;
    return $modelo->consulta;
    

Ejemplo de uso

$complemento = new stdClass();
$complemento->where = "WHERE id = 1";
$complemento->filtro_especial = "AND estatus = 'activo'";
$modelo = new modelo();
$consulta_base = "SELECT * FROM usuarios";

$resultado = $this->consulta_full_and($complemento, $consulta_base, $modelo);

// Resultado esperado:
// SELECT * FROM usuarios WHERE id = 1 AND estatus = 'activo'

Código de la Función

final public function consulta_full_and(stdClass $complemento, string $consulta, modelo $modelo): string|array
    {

        $consulta = trim($consulta);
        if($consulta === ''){
            return $this->error->error(mensaje: 'Error $consulta no puede venir vacia',data: $consulta, es_final: true);
        }

        $complemento_r = $this->complemento(complemento: $complemento, modelo: $modelo);
        if(errores::$error){
            return $this->error->error(mensaje:'Error al inicializar complemento',data:$complemento_r);
        }


        $sql = $this->sql(complemento: $complemento_r, consulta_previa: $consulta);
        if(errores::$error){
            return $this->error->error(mensaje:'Error al generar sql',data:$sql);
        }
        $sql = trim($sql);
        $modelo->consulta = $sql;
        return $modelo->consulta;
    }