什么是 ORM,以及在 PHP 上的使用
2019-02-26| 程成| 57| 0| PHP技术

百度百科:对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 [1]  。从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。


简单的说就是对象模型和关系模型的一种映射。为什么要有这么一个映射?很简单,因为现在的开发语言基本都是oop的,但是传统的数据库却是关系型的。为了可以靠贴近面向对象开发,我们想要像操作对象一样操作数据库。


核心就是支持纯面向对象的开发,这样就会产生一个不得不面对的问题,处于数据源层的关系型数据库不支持面向对象中对象之间的复杂关系。


如何将系统的当前状态持久到数据源层将非常棘手。你可以在业务逻辑层,通过数据访问层来处理。ORM就是数据访问层强大的一种解决方案。通过它,可以最大限度隔离业务逻辑层和数据源之间的耦合度。



举个例子:获取一篇文章,传统的方式先要执行一个sql检索数据


select * from post where id = 1


然后输出标题和内容使用


echo $post['title']; echo $post['content'];


上面的代码遇到面向对象强迫症者,他们会纠结死的。

所以他们想出了这个东西,在ORM里获取一篇文章可以这样:


$post = postTable::getInstance()->find(1);
#会再内部执行select * from post where id = 1


然后输出:


echo $post->getTitle();
echo $post->getContent();


妈妈再也不用担心我的强迫症了^_^

高级点的应用,文章和分类是一对多关系、文章和标签是多对多关系


$cate = $post->getCategory(); //获取文章分类
echo $cate->getName(); //获取分类名
$tags = $post->getTags(); //获取一个文章的所有标签


是不是一个sql都没写就获取到我们需要的所有数据了?使用ORM可以完全不写sql而实现应用,这些ORM都替我们做了。

除此之外,orm还可以隔离底层数据库层,我们不需要关心我们使用的是mysql还是其他的关系型数据库。


我知道的orm: doctrine和propel

除了orm之外还有odm,即object document mapping,对象文档映射,使用文档数据库比如mongodb时使用。




×
作者:程成
QQ:492245711