【问题标题】:For Doctrine ORM, why is DBAL needed in addition to PDO?对于 Doctrine ORM,为什么除了 PDO 还需要 DBAL?
【发布时间】:2012-03-03 21:32:18
【问题描述】:

我使用 Doctrine 2 ORM 已经有一段时间了,但有些东西我一直不太明白。

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

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

【问题讨论】:

    标签: orm pdo doctrine-orm


    【解决方案1】:

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

    Per PHP PDO docs:

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

    【讨论】:

    • 谢谢 - 这有助于我理解层之间的关系。
    【解决方案2】:

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

    public function insert($tableName, array $data)
    

    插入一条带有转义的新记录。

    【讨论】:

    • 查看源代码是个好主意,它将帮助我了解每一步发生的情况
    猜你喜欢
    • 2011-05-21
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 2020-11-03
    • 2016-09-01
    • 1970-01-01
    相关资源
    最近更新 更多