2013-03-05 95 views
0

我很久以前就創建了一個數據庫類,它總是在我的項目中使用它。使用數據庫類,db抽象層和orm有什麼區別?

事情是這樣的:

class Database 
{ 
    function query($sqlQuery) { 
     $this->prepare($sqlQuery); 
    } 

    function connect($databaseConnectionValues) { } 

    function read() { } 

    function prepare() { } 

    ...etc 
} 

框架,如Laravel做一個完全不同的方式。他們從不執行SQL。

事情是這樣的:

$users->find('Demo')->select('email')->get(); 

我會在這兩個問題。

問題1:我相信第二個代碼被稱爲「ORM」,但什麼是「數據庫抽象層」?另外,數據庫有多少層? (我可以做進一步的研究,當我得到他們的名字。)

問題2:我爲什麼要使用ORM爲什麼不呢?

回答

1

這裏的瘦:

  1. 數據庫抽象層=一個工具,它的數據庫功能 和語法,並重新包裝他們使用的編程。
  2. ORM =對象關係映射器(可能包含數據庫 抽象)更進一步,並允許您通過編程對象管理表之間的關係 。

這會使該代碼片段成爲數據庫抽象層。

$users->find('Demo')->select('email')->get(); 

如果它有一些語法,如:

$users->join('Friends')->find('Demo')->select('email')->get(); 

或者類似的你有你的手的ORM。

唯一一次你會發現ORM有用的是,如果你必須做連接查詢,並希望將多個表格的結果很好地預先打包到他們自己的模型中,然後進行適當的組織。例如:

$u = $user->join('friends')->where('name', 'mike')->get(); 

echo $u->name; // would be mike; 
echo $u->friends[0]->name; // would be the name of another user who's mike's friend 

這是所有非常概念和當然框架不可知論。在這種情況下,將在模型類中定義一個關係,該關係將所有用戶作爲所選用戶的朋友加載「朋友」屬性。

如果您不在表上進行連接,即使您選擇的框架有一個,也不要擔心ORM功能。你只需要使用它,如果你需要它。

+0

Orm使您的數據的對象,並使其更容易與相關的對象工作。連接也可以通過數據庫抽象層 – Miguelo 2013-03-05 07:20:34

+0

@Miguelo完成,非常真實。區別在於抽象層不能提供對來自兩個或多個表的數據的相同級別的控制。 – 2013-03-06 17:27:56