Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于ORM,为什么除了PDO之外还需要DBAL?_Orm_Pdo_Doctrine Orm - Fatal编程技术网

对于ORM,为什么除了PDO之外还需要DBAL?

对于ORM,为什么除了PDO之外还需要DBAL?,orm,pdo,doctrine-orm,Orm,Pdo,Doctrine Orm,我已经和条令2 ORM合作一段时间了,有一件事我从来没有完全理解过 DBAL(数据库抽象层)有什么用途?PDO本身就是一个数据库抽象层,那么为什么ORM不能直接与PDO一起工作呢 我并不是在试图找到一种使用DBAL或任何东西的方法。我一直不明白为什么需要额外的层,在文档中似乎找不到明确的答案。不,PDO是“数据访问层”,而不是“数据库抽象层”。这意味着您可以切换数据库并仍然进行相同的方法调用,但PDO不会重新编写sql查询以匹配所选数据库或模拟任何数据库功能 : PDO提供了一个数据访问抽象层,

我已经和条令2 ORM合作一段时间了,有一件事我从来没有完全理解过

DBAL(数据库抽象层)有什么用途?PDO本身就是一个数据库抽象层,那么为什么ORM不能直接与PDO一起工作呢

我并不是在试图找到一种使用DBAL或任何东西的方法。我一直不明白为什么需要额外的层,在文档中似乎找不到明确的答案。

不,PDO是“数据访问层”,而不是“数据库抽象层”。这意味着您可以切换数据库并仍然进行相同的方法调用,但PDO不会重新编写sql查询以匹配所选数据库或模拟任何数据库功能

:

PDO提供了一个数据访问抽象层,这意味着,无论使用哪个数据库,都使用相同的函数来发出查询和获取数据。PDO不提供数据库抽象;它不会重写SQL或模拟缺少的特性。如果您需要一个完整的抽象层,那么您应该使用它


Doctrine2实际上支持一些非PDO数据库,这就是原因之一。 查看源代码也很有用。连接类(例如)有一个很好的:

public function insert($tableName, array $data)

这将插入一条包含转义的新记录。

谢谢-这有助于我更好地理解层之间的关系。查看源代码是一个很好的主意,它将帮助我了解每一步发生的事情