ORM:object relation mapping,即對象關系映射,簡單的說就是對象模型和關系模型的一種映射。為什么要有這么一個映射?很簡單,因為現在的開發語言基本都是oop的,但是傳統的數據庫卻是關系型的。為了可以靠貼近面向對象開發,我們想要像操作對象一樣操作數據庫。
舉個例子:獲取一篇文章,傳統的方式先要執行一個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時使用

核心就是支持純面向對象的開發,這樣就會產生一個不得不面對的問題,處於數據源層的關系型數據庫不支持面向對象中對象之間的復雜關系。
如何將系統的當前狀態持久到數據源層將非常棘手。你可以在業務邏輯層,通過數據訪問層來處理。ORM就是數據訪問層強大的一種解決方案。通過它,可以最大限度隔離業務邏輯層和數據源之間的耦合度。
全名object relation mapping
http://segmentfault.com/q/1010000000318125