2009-11-03 17 views
6

Nigdy nie doceniałem ORM-ów, więc myślę, że jedynym sposobem, aby temu zaradzić, jest samodzielne zbudowanie podstawowego, abym mógł zobaczyć, co to jest. Mając to na uwadze, jakie są podstawowe funkcje, które powinienem uwzględnić, aby stworzyć półmasywną ORM?Funkcje potrzebne podczas budowania ORM z PHP?

O ile mogę powiedzieć, że to po prostu trzeba pracować tak dla programisty końcowego:

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

Każda klasa modelu byłoby rozszerzenie klasy ORM, które mają wszystkie podstawowe metody

  • find ($ id)
  • findAll ($ where)
  • save()

Inne funkcje Przydatne byłyby takie rzeczy jak:

  • możliwość żądania wiersze z pewnym id User::find(34)
  • stanie ograniczyć wiersze wynikowe z których podobne opcje
  • stanie związać jeden obiekt rząd do wielu wierszy z innej tabeli. (1 do wielu)
  • Budowanie zapytań w taki sposób, że SQL został napisany automatycznie.

Czy ktoś mógłby mi powiedzieć, czego potrzebuję. Przeglądam niektóre biblioteki, takie jak: Doctrine, EZPDO, dORM i KohanaPHP, ale nie mogę znaleźć biblioteki, która jest łatwa do strawienia, aby dowiedzieć się, jaka lista funkcji będzie potrzebna do rozwiązania tego projektu.

Znalazłem image detailing niektóre oferty ruby ​​i trochę więcej informacji na temat projektu IgnitedRecord.

Odpowiedz

-1

Upewnij się, że możesz obsłużyć wiele do wielu relacji.

+0

Co przykładem tego będzie? – Xeoncross

+2

Możesz mieć model DB, w którym użytkownik może należeć do więcej niż jednej gry - więc w DB nie miałbyś jednego KLAWISZA ZAGRANICZNEGO na użytkowniku, miałbyś tabelę dołączania. ORM powinien sobie z tym poradzić, oferując użytkownikowi user-> getAllGames() lub coś podobnego. Pamiętaj także o: 1. Zaproponuj zdolność do leniwych lub obciążonych gier związanych z ładowaniem podczas ładowania użytkownika 2. Zaproponuj możliwość zapisywania wszystkich powiązanych gier podczas zapisywania użytkownika. –

Powiązane problemy