2009-11-03 7 views
6

Ich habe ORMs nie wirklich geschätzt, also denke ich, dass der einzige Weg, dies zu beheben, darin besteht, ein grundlegendes selbst zu bauen, damit ich sehen kann, was der ganze Tumult ist. Was sind also die grundlegenden Funktionen, die ich für ein halb-nutzbares ORM benötigen würde?Benötigte Funktionen beim Aufbau eines ORM mit PHP?

Soweit ich sagen kann, wäre es im Grunde wie dies für das Ende Programmierer arbeiten müssen:

/* 
* 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; 
    } 
} 

Jedes Modell Klasse würde die ORM-Klasse erweitern, die alle grundlegenden Methoden

    haben würde
  • find ($ id)
  • findAll ($ where)
  • save()

Weitere nützliche Funktionen wären Dinge wie:

  • Able Reihen mit einer bestimmten ID User::find(34)
  • Able begrenzen Ergebniszeilen beantragen mit WHERE wie Optionen
  • Able eine Zeile Objekt zu vielen Zeilen binden von einem anderen Tisch. (1 zu viele)
  • Abfrageaufbau, so dass das SQL automatisch geschrieben wurde.

Könnte jemand mir sagen, was ich brauche. Ich habe einige der Bibliotheken wie Doctrine, EZPDO, dORM und KohanaPHP angeschaut, aber ich kann nicht scheinen, eine Bibliothek zu finden, die leicht zu verdauen ist, um herauszufinden, was die Merkmalsliste sein müsste, um dieses Projekt anzugehen.

Ich fand eine image detailing einige Ruby Angebote und einige weitere Informationen über die IgnitedRecord Projekt.

Antwort

-1

Bitte stellen Sie sicher, dass Sie viele zu viele Beziehungen verarbeiten können.

+0

Was wäre ein Beispiel dafür sein? – Xeoncross

+2

Sie könnten ein DB-Modell haben, bei dem ein Benutzer zu mehr als einem Spiel gehören kann - in der DB hätten Sie also keine einzige FREMDSCHLÜSSEL für den Benutzer, Sie hätten eine Join-Tabelle. ORM sollte dies umgehen, indem ein Benutzer-> getAllGames() oder etwas ähnliches. Auch zum Nachdenken über: 1. Angebot Fähigkeit eifrig oder faul laden verknüpfte Spiele beim Laden eines Benutzers 2. Angebot Fähigkeit, alle zugeordneten Spiele zu speichern, wenn Sie einen Benutzer speichern. –