Skip to content

manuelj555/orm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ORM

Simple ORM para persistencia de Objetos en Base de Datos.

Configuración

Para establecer la Configuración de conexión se debe hacer de la siguiente manera:

<?php

use Manuelj555\ORM\Db;

// Usando un array

Db::factory(array(
    'default' => array(
        'driver' => 'mysql',
        'dbname' => 'test',
        'username' => 'root',
        'password' => null,
        'cache' => __DIR__ . '/cache/', //directorio donde se cachea la info de las tablas.
        'debug' => true, //opcional, por defecto true
        'options' => array( //opciones para la conexión PDO
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        ),
    ),
    'otra' => array(
        'driver' => 'sqlite',
        'dbname' => 'test',
        'username' => 'root',
        'password' => null,
        'cache' => __DIR__ . '/cache/',
    )
));


// Usando una función

Db::factory(function(){
    //debe retornar un arreglo de conexiones.
    return array(
        'default' => array(
            'driver' => 'mysql',
            'dbname' => 'test',
            'username' => 'root',
            'password' => null,
            'cache' => __DIR__ . '/cache/', //directorio donde se cachea la info de las tablas.
            'debug' => true, //opcional, por defecto true
            'options' => array( //opciones para la conexión PDO
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            ),
        )
    );

});

Consultas

<?php

use Manuelj555\ORM\Db;

$conection = Db::get(); //por defecto devuelve la conexión 'default';
$conection = Db::get('otra');

$conection->createQuery("SELECT * FROM usuarios")->fetchAll();
$conection->createQuery("SELECT * FROM usuarios WHERE nombre = :nom", array(':nombre' => 'Manuel')->fetchAll();
$conection->createQuery("SELECT * FROM usuarios WHERE nombre = ?", array('Manuel')->fetchAll();

//Usando Db directo:

Db::get('otra')->createQuery("SELECT * FROM usuarios")->fetchAll();
Db::get()->createQuery("SELECT * FROM usuarios WHERE nombre = ?", array('Manuel')->fetchAll();

//QueryBuilder

Db::get()->createQueryBuilder()
         ->select('*')
         ->from('usuarios', 'u')
         ->join('compras', 'c', 'c.usuarios_id = u.id')
         ->where('nombre = ?')
         ->setParameters(array('Manuel'))
         ->fetchAll();

Devolviendo Clases

<?php

use Manuelj555\ORM\Db;

class Usuario
{
    const TABLE = 'user'; //opcional, por defecto la clase en small_case
    
    protected id;
    protected name;
    
    public function getId(){ return $this->id; }
    
    public function getName(){ return $this->name; }
    
    public function setName($name){ $this->name = $name; }
}

Db::get()->find('Usuario', 2); //busca en la tabla user por id = 2, devuelve una instancia de Usuario.

$repository = Db::get()->getRepository('Usuario');

$repository->find(2);

$repository->findBy(array('name' => 'Manuel'));

Db::get()->getRepository('Usuario')->findAll();

$repository->findAll(array('name' => 'Manuel'));

//Query Builder

$repository->createQueryBuilder('u')
         ->where('u.name = :n')
         ->setParameter(':n' => 'Manuel')
         ->execute()->fetch();

Crear, Actualizar, Eliminar

<?php

use Manuelj555\ORM\Db;

class Usuario
{
    const TABLE = 'user'; //opcional, por defecto la clase en small_case
    
    protected id;
    protected name;
    protected email;
    
    public function getId(){ return $this->id; }
    
    public function getName(){ return $this->name; }
    
    public function setName($name){ $this->name = $name; }
    
    public function getEmail(){ return $this-email; }
    
    public function setEmail($e){ $this->email = $e; }
}

$user = new Usuario();

$user->setName("Manuel");
$user->setEmail("manuel@test.com");

Db::get()->save($user);
Db::get()->flush(); //las consultas no se ejecutan hasta hacer flush() o commit();

Db::get()->save($user);
Db::get()->flush(); //No actualiza, porque no se cambió nada en el objeto.

$user->setName("Manuel José");

Db::get()->save($user); //actualiza solo el name
Db::get()->save($user); //no hace nada
Db::get()->save($user); //no hace nada
Db::get()->flush(); //Hace commit.

$user = Db::get()->find('Usuario', 1);

Db::get()->save($user); //no hace nada

$user->setName("Manuel 2");
$user->setEmail("manuel@test.com");

Db::get()->save($user); //actualiza solo el name, porque el email no cambió.
Db::get()->flush(); //Hace commit.

Db::get()->remove($user); //elimina el usuario de la BD
Db::get()->flush(); //Hace commit.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages