Tengo ya bastante tiempo trabajando en PHP, pero soy relativamente nuevo para lo que es PHP5 por lo que el fin de semana pasado decidí dar el salto y empezar portando a PHP algo que había hecho una ve en Java. La idea es una implementación de ActiveRecords, o lo que es lo mismo, una clase que te permita crear los objetos de acceso a la base de datos sin necesidad de crearlos tú.
Lo he llamado PHP5DBObject (traten de conseguir un nombre mejor y que esté disponible en SourceForge
 ) en fin he creado ahí el proyecto y lo estoy liberando bajo una licencia LGPL, pero quería pedir (a quien tenga un rato) que le de un vistazo y me haga cualquier recomendación que le venga a la cabeza.
 ) en fin he creado ahí el proyecto y lo estoy liberando bajo una licencia LGPL, pero quería pedir (a quien tenga un rato) que le de un vistazo y me haga cualquier recomendación que le venga a la cabeza.La página del proyecto es: http://sourceforge.net/projects/php5dbobject
Un poco la idea es la siguiente: Supón que tienes la siguiente tabla:
usuario
id: int auto_increment
name: varchar(100)
Pues para poder acceder a los datos de la tabla te basta con:
Código PHP:
   <?php
require_once 'PHP5DBObject.php';
 
$config = array(
  'Usuario' => array(
    'table' => 'usuario',
    'fields' => ('id' => 'integer', 'name' => 'text')),
    'pk' => array('id' => array('insert' => false))
  )
);
 
PHP5DBObject::setup($config);
PHP5DBObject::setDefaultConnection($conn); // Conn es un objeto de conexión que implemente DBManager (se incluye uno)
 
// Hecho esto ya se puede trabajar con la base de datos.
// Crear un usuario es:
$usuario = new Usuario();
$usuario->name = 'Paolo';
$usuario->create();
print $usuario->id; // Contiene el valor del id auto-asignado
 
// Para obtener un usuario:
$id = 4;
$usuario =& Usuario::factory($id);
print $usuario->id . ': ' . $usuario->name;
 
// Para obtener los usuarios que empiecen por 'Pa' sería (primera página de hasta 50 registros):
$usuarios = Usuario::browse("name like '?%'", array('Pa'), 'name asc', 50, 1);
foreach($usuarios as $usuario) {
 print $usuario->id . ': ' . $usuario->name . '<br/>';
}
 
// Eliminar un usuario sería:
Usuario::delete(4);
 
// Actualizar un usuario es:
$id = 4;
$usuario =& Usuario::factory($id);
$usuario->setName('Nuevo nombre'); // también soporta getters y setters a la Java
$usuario->update();
 
?>    id: int auto_increment
usuario_id: int
email: varchar(100)
Bastaría con que el config sea:
Código PHP:
   $config = array(
  'Usuario' => array(
    'table' => 'usuario',
    'fields' => ('id' => 'integer', 'name' => 'text')),
    'pk' => array('id' => array('insert' => false)),
    'methods' => array(
      'getEmails' => array(
        'method' => 'getList',
        'class' => 'Email',
        'table' => 'email',
        'select' => array(array('tableField' => 'id', 'classField' => 'id')),
        'where' => array(array('tableField' => 'usuario_id' , 'instanceField' => 'id'))
      )
    )
  ),
 'Email' => array(
    'table' => 'usuario',
    'fields' => ('id' => 'integer', 'usuario_id' => 'integer', 'name' => 'text')),
    'pk' => array('id' => array('insert' => false)),
    'methods' => array(
      'getUser' => array(
        'method' => 'getFK',
        'class' => 'User',
        'fieldMaps' => array(array('classField' => 'id', 'instanceField' => 'usuario_id'))
      ),
      'setMain' => array(
        'method' => 'setFK',
        'class' => 'User',
        'fieldMaps' => array(array('classField' => 'id', 'instanceField' => 'usuario_id'))
      )
    )
  )
); 
    Código PHP:
   $usuario =& Usuario::factory(4); // Obtienes el usuario id=4
$emails = $usuario->getEmails();
foreach ($emails as $email) {
  print $email->email . '<br/>';
} 
    Tiene también (por desarrollar) un soporte para cache.
En fin, si les parece interesante, les animo a que le den un vistazo y por favor, no duden en hacerme cualquier pregunta.
Saludos
 
 

 Podrían darme comentarios sobre esta librería
 Podrían darme comentarios sobre esta librería 

 
 
