PHPackages                             ctrbts/base-model - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. ctrbts/base-model

ActiveLibrary[Database &amp; ORM](/categories/database)

ctrbts/base-model
=================

Una librería ligera de abstracción de base de datos PDO (Refactorizada)

v1.0.0(5mo ago)01LGPL-3.0-onlyPHPPHP &gt;=8.0

Since Nov 30Pushed 5mo agoCompare

[ Source](https://github.com/ctrbts/base-model)[ Packagist](https://packagist.org/packages/ctrbts/base-model)[ RSS](/packages/ctrbts-base-model/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)DependenciesVersions (2)Used By (0)

BaseModel
=========

[](#basemodel)

Una librería de abstracción de base de datos ligera y segura para PHP, basada en PDO. Diseñada para funcionar como un query builder simple o una capa tipo ORM en aplicaciones MVC.

Este repositorio contiene una versión modernizada y refactorizada del clásico PDODb manteniendo las llamadas a los métodos originales para asegurar la compatibilidad con código existente.

Requisitos
----------

[](#requisitos)

- PHP 8.0 o superior.
- Extensión PDO habilitada.
- Drivers de base de datos correspondientes (mysql, sqlite, pgsql, sqlsrv).

Instalación
-----------

[](#instalación)

Instalar vía composer:

```
composer require ctrbts/base-model
```

Cambios Principales (Refactorización)
-------------------------------------

[](#cambios-principales-refactorización)

Esta librería ha sido actualizada para cumplir con estándares modernos de PHP y seguridad:

1. Namespace: Se ha introducido el namespace BaseModel. Deberás actualizar tus llamadas new BaseModel(...) a new BaseModel\\BaseModel(...) o agregar use BaseModel\\BaseModel;.
2. Tipado Estricto: Se ha implementado declare(strict\_types=1) y tipado fuerte en propiedades y argumentos de métodos. Esto previene errores silenciosos y mejora la estabilidad.
3. Seguridad en Constructor: Se eliminó el uso inseguro de "variables variables" ($$key) en el constructor. Ahora los parámetros se asignan de manera explícita y controlada.
4. Sanitización: Mejorada la sanitización en cláusulas ORDER BY y nombres de tablas para prevenir inyecciones SQL en identificadores.
5. Manejo de Errores: Uso consistente de Exception y PDOException.
6. PHP 8 Match: Uso de expresiones match en lugar de switch para operaciones más limpias y estrictas.

Nota de compatibilidad: Aunque el código interno ha cambiado drásticamente, se han conservado los nombres de todos los métodos públicos y el orden de sus parámetros para asegurar que tu código existente funcione con mínimos cambios.

¿Por qué existe esta versión?
-----------------------------

[](#por-qué-existe-esta-versión)

Si conoces la librería original de tommyknocker, notarás que su versión 2.0+ ha evolucionado hacia un framework de base de datos completo con ORM, migraciones y CLI, similar a Eloquent o Doctrine.

Esta refactorización (BaseModel) mantiene la filosofía original:

- Ligereza: Todo el código reside en una sola clase. No hay sobrecarga de cientos de archivos incluidos.
- Simplicidad: Es un drop-in replacement para sistemas legacy o frameworks ligeros que solo necesitan un wrapper de PDO robusto y un Query Builder, sin la complejidad de un Active Record completo.
- Control: Ideal para desarrolladores que quieren entender y controlar exactamente qué consultas se ejecutan sin capas de abstracción "mágicas".

Uso Básico
----------

[](#uso-básico)

```
use BaseModel\BaseModel;
```

### Inicialización

[](#inicialización)

```
$db = new BaseModel([
    'type' => 'mysql',
    'host' => 'localhost',
    'username' => 'root',
    'password' => 'secret',
    'dbname' => 'mi_app',
    'charset' => 'utf8mb4'
]);
```

### Select (Get)

[](#select-get)

```
// Obtener todos los usuarios activos
$users = $db->where('active', 1)
            ->get('users');

// Obtener un solo usuario
$user = $db->where('id', 15)
           ->getOne('users');
```

### Insert

[](#insert)

```
$data = [
    'username' => 'nuevo_usuario',
    'email' => 'email@test.com',
    'created_at' => $db->now()
];

$id = $db->insert('users', $data);
```

### Update

[](#update)

```
$data = ['active' => 0];
$db->where('last_login', $db->interval('-1 year'), '
