我已经和Doctrine 2 ORM合作了一段时间,而且有些东西我从来都不太了解。
Doctrine DBAL(数据库抽象层)的用途是什么? PDO本身就是一个数据库抽象层,为什么ORM不能直接与PDO一起工作?
我并不是想找到一种方法来使用DBAL或任何东西。我只是不明白为什么需要额外的图层,似乎无法在文档中找到明确的答案。
答案 0 :(得分:9)
不,PDO是“数据访问层”,而不是“数据库抽象层”。这意味着您可以切换数据库并仍然进行相同的方法调用,但PDO不会重写sql查询以匹配所选数据库或模拟任何数据库功能。
PDO提供了一个数据访问抽象层,这意味着,无论您使用哪个数据库,都可以使用相同的函数来发出查询和获取数据。 PDO不提供数据库抽象;它不会重写SQL或模拟缺少的功能。如果你需要那个设施,你应该使用一个完整的抽象层。
答案 1 :(得分:1)
Doctrine2实际上支持一些非PDO数据库,这是一个原因。 查看源代码也很有用。 Connection类(例如)有一个很好的:
public function insert($tableName, array $data)
通过转义插入新记录。