频道直达 - 专题 - 新闻 - 基础 - 高级 - 安装 - 技巧 - 数据库 - 手册 - PHP - Linux - Java - MySQL - Apache - 麻辣堂 - 狼盟 - Rails社群 - 搜索 - 下载 - 开源 - 论坛
PHP开发资源网 主页>高级应用> 收藏此文 | 收藏本站 | 设为首页
优酷喜剧片, 招商加盟 迅雷看看, 传奇世界 传世私服 天龙八部新品上市营销策划 魔兽世界

symfony和对象关系映射(ORM)的集成

来源:www.phpres.com 作者:Angelover 出处:www.phpres.com 2007-8-12 10:56:01 进入讨论组
关 键 词: 集成 关系 对象 一个 数据库 访问 使用 可以 Propel 方法

对象关系映射(ORM)

数据库是关系型数据库。 PHP5和Symfony是面向对象的。 为了用面向对象的方法访问数据库, 必须用一个接口来表示对象之间的逻辑关系。 这个接口就叫作对象关系映射或者ORM。

ORM是由对象组成,用来访问数据和保持事务关系。 An ORM is made up of objects that give access to data and keep business rules within themselves.

对象/关系的抽象层的其中一个优点是可以不用直接去访问数据库。 它会使用经过优化的模型对象来访问当前的数据库。

这就意味着在项目中期换一套数据库将是很简单的事情。想象一下当你必须为程序写一个原型的时候,客户并不能确定哪种数据库最适合他们。 你可以先使用SQLite来开发程序, 当客户决定使用MySQL, PostgreSQL或者Oracle的时候,我们只要在配置文件中稍作修改就可以正常工作了。

抽象层封装了数据逻辑。 其他程序并不需要了解SQL的查询语句,却依旧能轻松的访问数据库。 那些对数据库开发者专家也很清楚的知道该做些什么。

使用对象而非记录, 用类而非表,还有其他益处: 你能为你的表增加一些新的存取方法。 例如, 你有一个名叫Client的表,有两个字段,分别是FisrstName和LastName, 你也许想直接获得一个完整的姓名。 在面向对象中, 为一个Client类添加一个访问方法,就像这样:
[php]
public function getName()
{
  return $this->getFirstName.' '.$this->getLastName();
}

所有重复数据访问功能和数据的业务逻辑都可以在对象中维护。 例如,有一个用来生成对象的ShoppingCart类。 我们在结帐时想获得一个总价, 你可以加一个 getTotal() 方法,就像这样:
[php]
public function getTotal()
{
  $total = 0;
  foreach ($this->getItems() as $item)
  {
    $total += $item->getPrice() * $item->getQuantity();
  }
  return $total;
}

就这好了,想象一下要写多长的SQL语句才能完成同样的事情!

Propel,另一个开源项目,是当前最好的基于PHP5的对象/关系抽象层。 Symfony框架无缝集成了Propel, 所以本书大多数的数据处理描述都使用了Propel的语法。 本书将描述如何使用Propel对象, 但是更详细的资料可以参考Propel的网站(http://propel.phpdb.org/trac/)。
欢迎进入PHP开发资源论坛讨论。
收藏此文】【 】【打印】【关闭
相关文章
图文推荐
论 坛 资 源
PHP开发资源网奋斗目标
阅读排行:
热门技术文档
最新图文档
本站编辑推荐:(本站开通Delphi4PHP专区,欢迎进入论坛交流!)
编缉最近更新文章
网站赞助商
搜索您感兴趣的内容
 
   网站首页 -  网站地图 -  网站合作 -  手册中心 -  通用网址 -  网站论坛 -  网站投稿 -  友情链接 -  帮助中心
版权所有:PHP开发资源网 © 2003-2008 通用网址:PHP资源网 合作媒体: 赛迪网IT技术
互联网违法和不良信息举报中心 | 不良信息举报信箱