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

diferente_de

La función diferente_de es una función privada que genera una cláusula SQL para comparar si un campo es diferente de un valor específico. La función valida el campo, asegura que no sea numérico, y genera una cláusula con un operador <> (diferente). Además, utiliza una función auxiliar para determinar si debe incluir un operador AND antes de la cláusula.

Signatura


private function diferente_de(string $campo, string $diferente_de_sql, string $value): string|array

Parámetros

  • string $campo:
    El nombre del campo en la tabla que se va a comparar. Debe ser un string no vacío que represente una columna en la base de datos.

  • string $diferente_de_sql:
    La cláusula SQL existente. Se utiliza para determinar si se debe agregar un operador AND para concatenar la nueva condición con las condiciones existentes.

  • string $value:
    El valor con el que se comparará el campo, para asegurarse de que sean diferentes.

Retorna

  • string|array:
    Retorna la cláusula SQL generada si la validación es exitosa. En caso de error, retorna un array de error generado por $this->error->error().

Explicación Detallada

  1. Validación del campo:

    • La función valida que el campo no esté vacío y que no sea numérico. Si falla la validación, se genera un mensaje de error y se retorna un array con el mensaje de error.
  2. Inserción del operador AND si es necesario:

    • La función llama a and_filtro_fecha() para determinar si se debe incluir un operador AND en la cláusula SQL. Esto es útil si el valor de $diferente_de_sql ya contiene otras condiciones SQL.
  3. Protección de datos contra inyecciones SQL:

    • Tanto el campo como el valor son procesados con addslashes() para escapar caracteres especiales y prevenir inyecciones SQL.
  4. Generación de la cláusula SQL:

    • La función genera la cláusula SQL en la forma campo <> 'value', asegurándose de que el campo y el valor estén debidamente escapados y concatenados con un posible AND.
  5. Retorno de la cláusula SQL:

    • La función retorna la cláusula SQL generada.

Ejemplos

$campo = 'id_producto';
$diferente_de_sql = '';
$value = '123';

$resultado = $this->diferente_de($campo, $diferente_de_sql, $value);

// Resultado esperado:
// " id_producto <> '123' "

Código de la Función

private function diferente_de(string $campo, string $diferente_de_sql, string $value): string|array
    {
        $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);
        }
        $and = (new \gamboamartin\where\where())->and_filtro_fecha(txt: $diferente_de_sql);
        if(errores::$error){
            return $this->error->error(mensaje: "Error al integrar AND", data: $and);
        }

        $campo = addslashes($campo);
        $value = addslashes($value);

        return " $and $campo <> '$value' ";
    }