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 forma campo <> '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

  1. Iteración sobre el array de condiciones "diferente de":

    • La función recorre cada par clave-valor en el array $diferente_de.
  2. 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.
  3. 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.
  4. 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.
  5. 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;
    }