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

genera_in

La función genera_in es una función privada que genera una cláusula SQL IN a partir de un array que contiene una llave (nombre de columna) y un conjunto de valores. La función valida la estructura del array, verifica que los valores sean un array, y luego construye la cláusula SQL IN si los datos son correctos.

Signatura

private function genera_in(array $in): array|string

Parámetros

  • array $in:
    Un array asociativo que debe contener las claves llave (nombre del campo o columna) y values (un array de valores que se utilizarán en la cláusula IN).

Retorna

  • array|string:
    Retorna la cláusula SQL IN generada como una cadena 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 de las claves en el array $in:

    • La función utiliza valida_existencia_keys() para verificar que el array $in contenga las claves llave y values.
    • Si alguna de estas claves falta, se genera un mensaje de error y se retorna un array con el mensaje de error.
  2. Verificación del tipo de $values:

    • La función verifica que el valor asociado a la clave values sea un array. Si no lo es, se genera un mensaje de error y se retorna un array con el mensaje de error.
  3. Extracción de datos del array $in:

    • La función llama a data_in() de la clase where para extraer los datos necesarios, como la llave (llave) y la lista de valores (values).
    • Si ocurre un error durante la extracción de datos, se genera un mensaje de error y se retorna un array con el mensaje de error.
  4. Generación de la cláusula SQL IN:

    • La función llama a in_sql() para construir la cláusula SQL IN utilizando la llave y la lista de valores extraídos.
    • Si ocurre un error durante la generación de la cláusula SQL, se genera un mensaje de error y se retorna un array con el mensaje de error.
  5. Retorno de la cláusula SQL:

    • La función retorna la cadena que contiene la cláusula SQL IN generada.

Ejemplos

$in = [
    'llave' => 'id_producto',
    'values' => ['100', '200', '300']
];

$resultado = $this->genera_in($in);

// Resultado esperado:
// "id_producto IN ('100', '200', '300')"

Código de la Función

private function genera_in(array $in): array|string
    {
        $keys = array('llave','values');
        $valida = $this->validacion->valida_existencia_keys( keys:$keys, registro: $in);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al validar not_in',data: $valida);
        }
        $values = $in['values'];

        if(!is_array($values)){
            return $this->error->error(mensaje: 'Error values debe ser un array',data: $values, es_final: true);
        }

        $data_in = (new \gamboamartin\where\where())->data_in(in: $in);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al generar data in',data: $data_in);
        }

        $in_sql = $this->in_sql(llave:  $data_in->llave, values:$data_in->values);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al generar sql',data: $in_sql);
        }
        return $in_sql;
    }