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

发布于 2025-01-04 16:12:37 字数 192 浏览 0 评论 0原文

我使用 Doctrine 2 ORM 一段时间了,但有些东西我一直不太理解。

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

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

I've been working with Doctrine 2 ORM for some time, and there's something I've never quite understood.

What purpose does the Doctrine DBAL (database abstraction layer) serve? PDO itself a database abstraction layer, so why can't the ORM work directly with PDO?

I'm not trying to find a way around using DBAL or anything. I've just never understood why the extra layer is needed, and can't seem to find a clear answer in the documentation.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

此岸叶落 2025-01-11 16:12:37

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

每个 PHP PDO 文档

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

No, PDO is a "data-access layer", not a "database abstraction layer". Meaning that you can switch databases and still make the same method calls, but PDO will not re-write sql queries to match the selected database or emulate any database functionality.

Per PHP PDO docs:

PDO provides a data-access abstraction layer, which means that, regardless of which database you're using, you use the same functions to issue queries and fetch data. PDO does not provide a database abstraction; it doesn't rewrite SQL or emulate missing features. You should use a full-blown abstraction layer if you need that facility.

梦途 2025-01-11 16:12:37

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

public function insert($tableName, array $data)

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

Doctrine2 actually supports some non-PDO databases so that is one reason.
It's also useful to look at the source code. The Connection class (for example) has a nice:

public function insert($tableName, array $data)

Which inserts a new record complete with escaping.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文