0

我很久以前就创建了一个数据库类,一直在我的项目中使用它。

像这样的东西:

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,为什么不呢?

4

1 回答 1

1

下面是瘦身:

  1. 数据库抽象层 = 一种工具,它采用数据库功能和语法并将它们重新打包以便以编程方式使用。
  2. ORM = Object Relational Mapper,它可能包括一个数据库抽象,更进一步,允许您通过编程对象管理表之间的关系。

这将使该代码片段成为数据库抽象层。

$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

当然,这都是非常概念性和框架不可知的。在这种情况下,将在加载“friends”属性的模型类中定义与所有作为所选用户朋友的用户的关系。

如果您没有在表上进行连接,请不要担心 ORM 功能,即使您选择的框架有一个。只有在需要时才需要使用它。

于 2013-03-05T06:55:06.303 回答