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
oarray
- 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
-
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); }
- La función comienza validando que la consulta base
-
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); }
- La función llama a
-
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); }
- Una vez que el complemento ha sido inicializado, la función llama a
-
Almacenamiento y retorno de la consulta:
- La consulta SQL generada se almacena en el objeto
$modelo
en la propiedadconsulta
. Luego, la consulta es retornada.
$sql = trim($sql); $modelo->consulta = $sql; return $modelo->consulta;
- La consulta SQL generada se almacena en el objeto
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;
}