administrador.base.orm.where.diferente_de_sql - gamboamartin/administrador GitHub Wiki
diferente_de_sql
La función diferente_de_sql
es una función privada que genera una cláusula SQL basada en múltiples condiciones "diferente de" (<>
). Valida los campos y valores proporcionados en un array y construye una cláusula SQL que concatena estas condiciones, asegurando que los campos no sean numéricos y que se generen correctamente las comparaciones.
Signatura
private function diferente_de_sql(array $diferente_de): array|string
Parámetros
array $diferente_de
:
Un array asociativo donde las claves representan los nombres de los campos y los valores son los valores con los que se comparará cada campo. La función generará una condición SQL para cada par clave-valor en la formacampo <> 'valor'
.
Retorna
array|string
:
Retorna una cláusula SQL generada como una cadena si la validación y generación son exitosas. En caso de error, retorna un array de error generado por$this->error->error()
.
Explicación Detallada
-
Iteración sobre el array de condiciones "diferente de":
- La función recorre cada par clave-valor en el array
$diferente_de
.
- La función recorre cada par clave-valor en el array
-
Validación de cada campo:
- Para cada campo, la función valida que no esté vacío y que no sea numérico. Si la validación falla, se genera un mensaje de error y se retorna un array con el mensaje de error.
-
Generación de la cláusula SQL para cada condición:
- Por cada par campo-valor, la función llama a
diferente_de()
para generar la cláusula SQL que compara si el campo es diferente del valor proporcionado. - Si ocurre un error al generar la cláusula SQL, se genera un mensaje de error y se retorna un array con el mensaje de error.
- Por cada par campo-valor, la función llama a
-
Concatenación de las cláusulas SQL:
- La función concatena cada cláusula SQL generada en una sola cadena que representa la cláusula SQL completa.
-
Retorno de la cláusula SQL final:
- Si todo es exitoso, la función retorna la cláusula SQL completa.
Ejemplos
$diferente_de = [
'id_producto' => '123',
'nombre' => 'ProductoX'
];
$resultado = $this->diferente_de_sql($diferente_de);
// Resultado esperado:
// " id_producto <> '123' AND nombre <> 'ProductoX' "
Código de la Función
private function diferente_de_sql(array $diferente_de): array|string
{
$diferente_de_sql = '';
if(count($diferente_de)>0){
foreach ($diferente_de as $campo=>$value){
$campo = trim($campo);
if($campo === ''){
return $this->error->error(mensaje: "Error campo esta vacio", data: $campo, es_final: true);
}
if(is_numeric($campo)){
return $this->error->error(mensaje: "Error campo debe ser un atributo del modelo no un numero",
data: $campo, es_final: true);
}
$sql = $this->diferente_de(campo:$campo,diferente_de_sql: $diferente_de_sql,value: $value);
if(errores::$error){
return $this->error->error(mensaje: "Error al integrar sql", data: $sql);
}
$diferente_de_sql .= $sql;
}
}
return $diferente_de_sql;
}