2009-11-03 23 views
6

Nunca he apreciado realmente los ORM así que pienso que la única manera de remediar esto es construir uno básico para que yo pueda ver lo que es todo el alboroto. Entonces, con eso en mente, ¿cuáles son las características básicas que necesitaría incluir para hacer un ORM semiutilizable?¿Funcionalidades necesarias al construir un ORM con PHP?

Por lo que yo puedo decir, que sería básicamente que tenga que trabajar así para el programador final:

/* 
* Create a user 
*/ 
$user = new User(); 
$user->name = 'Joe'; 
$user->email = '[email protected]'; 
$user->save(); 
unset($user); 

/* 
* Create a game 
*/ 
$game = new Game(); 
$game->name = 'soccer'; 
$game->save(); 

/* 
* Set all users as players 
*/ 
$users = ORM::factory('users'); 
$users = $users->findAll(); 
foreach ($users as $user) { 
    $user->setGame($game); 
    $user->save(); 
} 
unset($users); 

/* 
* Get all games and show all users 
*/ 
$games = ORM::factory('games')->findAll(); 
foreach($games as $game) { 
    print $game->name; 
    print 'Users in game:'; 
    foreach($game->users as $user) { 
     print $user->name; 
    } 
} 

Cada clase modelo sería extender la clase ORM que tendría todos los métodos básicos

  • find ($ id)
  • findAll ($ dónde)
  • Save()

Otras características útiles serían cosas como:

  • poder solicitar filas con un cierto id User::find(34)
  • capaz de limitar las filas de resultados con DONDE como opciones
  • capaz de atar un objeto fila para muchas filas de otra mesa (1 a muchos)
  • Creación de consultas para que el SQL se haya escrito automáticamente.

¿Alguien más podría decirme lo que necesitaría? He estado buscando en algunas de las bibliotecas como Doctrine, EZPDO, dORM, y KohanaPHP, pero parece que no puedo encontrar una biblioteca que sea fácil de digerir para averiguar cuál debería ser la lista de características para abordar este proyecto.

Encontré un image detailing algunas de las ofrendas de ruby ​​y algo más de información sobre el proyecto IgnitedRecord.

Respuesta

-1

Asegúrese de que puede manejar muchas relaciones.

+0

¿Cuál sería un ejemplo de esto ser? – Xeoncross

+2

Es posible que tenga un modelo de base de datos donde un usuario puede pertenecer a más de un juego, por lo que en la base de datos no tendría una LLAVE EXTRAÑA en el usuario, tendría una tabla de unión. ORM debe manejar esto ofreciendo un usuario-> getAllGames() o algo similar. También hay que pensar en: 1. Ofrecer la capacidad de cargar juegos asociados con la carga lenta o floja al cargar un usuario 2. Ofrezca la capacidad de guardar todos los juegos asociados al guardar un usuario. –

Cuestiones relacionadas