使用数据库类、db抽象层和form有什么区别?


What is the difference between using a database class, db absraction layer and 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. 数据库抽象层=获取数据库功能的工具和语法,并重新打包以供编程使用。
  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

这些当然都是概念性的,与框架无关。在这种情况下,将在模型类中定义一个关系,该关系将与所选用户的所有朋友用户一起加载"friends"属性。

如果你不做表连接,不要担心ORM功能,即使你选择的框架有一个。