Last active
March 1, 2023 20:02
-
-
Save kevinacuna1/bc7c559f74f868f96ab3e5c1c9fc8799 to your computer and use it in GitHub Desktop.
models/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| namespace Model; | |
| class ActiveRecord | |
| { | |
| // Base DE DATOS | |
| protected static $db; | |
| protected static $tabla = ''; | |
| protected static $columnasDB = []; | |
| // Alertas y Mensajes | |
| protected static $alertas = []; | |
| // Definir la conexión a la BD - includes/database.php | |
| public static function setDB($database) | |
| { | |
| self::$db = $database; | |
| } | |
| public static function setAlerta($tipo, $mensaje) | |
| { | |
| static::$alertas[$tipo][] = $mensaje; | |
| } | |
| // Validación | |
| public static function getAlertas() | |
| { | |
| return static::$alertas; | |
| } | |
| public function validar() | |
| { | |
| static::$alertas = []; | |
| return static::$alertas; | |
| } | |
| // Consulta SQL para crear un objeto en Memoria | |
| public static function consultarSQL($query) | |
| { | |
| // Consultar la base de datos | |
| $resultado = self::$db->query($query); | |
| // Iterar los resultados | |
| $array = []; | |
| while ($registro = $resultado->fetch_assoc()) { | |
| $array[] = static::crearObjeto($registro); | |
| } | |
| // liberar la memoria | |
| $resultado->free(); | |
| // retornar los resultados | |
| return $array; | |
| } | |
| // Crea el objeto en memoria que es igual al de la BD | |
| protected static function crearObjeto($registro) | |
| { | |
| $objeto = new static; | |
| foreach ($registro as $key => $value) { | |
| if (property_exists($objeto, $key)) { | |
| $objeto->$key = $value; | |
| } | |
| } | |
| return $objeto; | |
| } | |
| // Identificar y unir los atributos de la BD | |
| public function atributos() | |
| { | |
| $atributos = []; | |
| foreach (static::$columnasDB as $columna) { | |
| if ($columna === 'id') continue; | |
| $atributos[$columna] = $this->$columna; | |
| } | |
| return $atributos; | |
| } | |
| // Sanitizar los datos antes de guardarlos en la BD | |
| public function sanitizarAtributos() | |
| { | |
| $atributos = $this->atributos(); | |
| $sanitizado = []; | |
| foreach ($atributos as $key => $value) { | |
| $sanitizado[$key] = self::$db->escape_string($value); | |
| } | |
| return $sanitizado; | |
| } | |
| // Sincroniza BD con Objetos en memoria | |
| public function sincronizar($args = []) | |
| { | |
| foreach ($args as $key => $value) { | |
| if (property_exists($this, $key) && !is_null($value)) { | |
| $this->$key = $value; | |
| } | |
| } | |
| } | |
| // Registros - CRUD | |
| public function guardar() | |
| { | |
| $resultado = ''; | |
| if (!is_null($this->id)) { | |
| // actualizar | |
| $resultado = $this->actualizar(); | |
| } else { | |
| // Creando un nuevo registro | |
| $resultado = $this->crear(); | |
| } | |
| return $resultado; | |
| } | |
| // Todos los registros | |
| public static function all() | |
| { | |
| $query = "SELECT * FROM " . static::$tabla; | |
| $resultado = self::consultarSQL($query); | |
| return $resultado; | |
| } | |
| // Busca un registro por su id | |
| public static function find($id) | |
| { | |
| $query = "SELECT * FROM " . static::$tabla . " WHERE id = ${id}"; | |
| $resultado = self::consultarSQL($query); | |
| return array_shift($resultado); | |
| } | |
| // Busca un registro por Email | |
| public static function where($columna, $valor) | |
| { | |
| $query = "SELECT * FROM " . static::$tabla . " WHERE {$columna} = '{$valor}'"; | |
| $resultado = self::consultarSQL($query); | |
| return array_shift($resultado); | |
| } | |
| /** Consulta plana de SQL (Utilizar cuando los métodos del modelo no son suficientes) */ | |
| public static function SQL($query) | |
| { | |
| $resultado = self::consultarSQL($query); | |
| return $resultado; | |
| } | |
| // Obtener Registros con cierta cantidad | |
| public static function get($limite) | |
| { | |
| $query = "SELECT * FROM " . static::$tabla . " LIMIT ${limite}"; | |
| $resultado = self::consultarSQL($query); | |
| return array_shift($resultado); | |
| } | |
| // crea un nuevo registro | |
| public function crear() | |
| { | |
| // Sanitizar los datos | |
| $atributos = $this->sanitizarAtributos(); | |
| // Insertar en la base de datos | |
| $query = " INSERT INTO " . static::$tabla . " ( "; | |
| $query .= join(', ', array_keys($atributos)); | |
| $query .= " ) VALUES (' "; | |
| $query .= join("', '", array_values($atributos)); | |
| $query .= " ') "; | |
| // Resultado de la consulta | |
| $resultado = self::$db->query($query); | |
| return [ | |
| 'resultado' => $resultado, | |
| 'id' => self::$db->insert_id | |
| ]; | |
| } | |
| // Actualizar el registro | |
| public function actualizar() | |
| { | |
| // Sanitizar los datos | |
| $atributos = $this->sanitizarAtributos(); | |
| // Iterar para ir agregando cada campo de la BD | |
| $valores = []; | |
| foreach ($atributos as $key => $value) { | |
| $valores[] = "{$key}='{$value}'"; | |
| } | |
| // Consulta SQL | |
| $query = "UPDATE " . static::$tabla . " SET "; | |
| $query .= join(', ', $valores); | |
| $query .= " WHERE id = '" . self::$db->escape_string($this->id) . "' "; | |
| $query .= " LIMIT 1 "; | |
| // Actualizar BD | |
| $resultado = self::$db->query($query); | |
| return $resultado; | |
| } | |
| // Eliminar un Registro por su ID | |
| public function eliminar() | |
| { | |
| $query = "DELETE FROM " . static::$tabla . " WHERE id = " . self::$db->escape_string($this->id) . " LIMIT 1"; | |
| $resultado = self::$db->query($query); | |
| return $resultado; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment