2009-11-03 47 views
6

我从来没有真正感谢ORM的,所以我认为解决这个问题的唯一方法就是自己建立一个基本的方法,这样我就可以看到所有的喧闹声了。因此,考虑到这一点,我需要包括哪些基本功能才能生成半可用的ORM?使用PHP构建ORM时需要哪些功能?

据我所知道的,那就基本上都需要这样的工作为最终程序员:

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

每个模型类将扩大这将对所有的基本方法

    的ORM类
  • 发现($ ID)
  • 的findAll($哪里)
  • 保存()

其它有用的功能会之类的东西:

  • 能够要求具有一定的ID User::find(34)
  • 能够限制与WHERE类似的选项结果行的行
  • 能扳平一行对象多行从另一张桌子。 (1到很多)
  • 查询构建以便SQL自动写入。

任何人都可以告诉我我需要什么。我一直在寻找一些图书馆,如Doctrine,EZPDO,dORMKohanaPHP,但我似乎无法找到一个易于理解的图书馆,以找出需要解决此项目的功能列表。

我发现一个image detailing一些红宝石的产品和一些IgnitedRecord项目的更多信息。

回答

-1

请确保您可以处理多对多的关系。

+0

什么会这样的一个例子是什么? – Xeoncross 2009-11-03 02:54:03

+2

您可能有一个DB模型,用户可以属于多个游戏 - 因此,在DB中,用户不会有一个FOREIGN KEY,那么您将拥有一个连接表。 ORM应该通过提供一个user-> getAllGames()或类似的东西来处理这个问题。 也想想: 1.提供加载用户时急于或延迟加载相关游戏的能力 2.提供在保存用户时保存所有相关游戏的能力。 – 2009-11-03 08:57:07

相关问题