【发布时间】:2012-03-03 21:32:18
【问题描述】:
我使用 Doctrine 2 ORM 已经有一段时间了,但有些东西我一直不太明白。
Doctrine DBAL(数据库抽象层)有什么用途? PDO 本身就是一个数据库抽象层,那为什么 ORM 不能直接和 PDO 一起工作呢?
我并不是想找到使用 DBAL 或其他任何东西的方法。我一直不明白为什么需要额外的层,并且似乎无法在文档中找到明确的答案。
【问题讨论】:
标签: orm pdo doctrine-orm
我使用 Doctrine 2 ORM 已经有一段时间了,但有些东西我一直不太明白。
Doctrine DBAL(数据库抽象层)有什么用途? PDO 本身就是一个数据库抽象层,那为什么 ORM 不能直接和 PDO 一起工作呢?
我并不是想找到使用 DBAL 或其他任何东西的方法。我一直不明白为什么需要额外的层,并且似乎无法在文档中找到明确的答案。
【问题讨论】:
标签: orm pdo doctrine-orm
不,PDO 是“数据访问层”,而不是“数据库抽象层”。这意味着您可以切换数据库并仍然进行相同的方法调用,但 PDO 不会重写 sql 查询以匹配所选数据库或模拟任何数据库功能。
PDO 提供了一个数据访问抽象层,这意味着,无论您使用哪个数据库,您都可以使用相同的函数来发出查询和获取数据。 PDO 不提供数据库抽象;它不会重写 SQL 或模拟缺失的功能。如果您需要该功能,您应该使用成熟的抽象层。
【讨论】:
Doctrine2 实际上支持一些非 PDO 数据库,这是原因之一。 查看源代码也很有用。 Connection 类(例如)有一个很好的:
public function insert($tableName, array $data)
插入一条带有转义的新记录。
【讨论】: