Для Doctrine ORM зачем нужен DBAL в дополнение к PDO? - PullRequest
3 голосов
/ 12 февраля 2012

Я работаю с Doctrine 2 ORM в течение некоторого времени, и есть кое-что, чего я никогда не понимал.

Для каких целей служит Doctrine DBAL (уровень абстракции базы данных)?PDO сам по себе является уровнем абстракции базы данных, так почему же ORM не может работать напрямую с PDO?

Я не пытаюсь найти способ обойти использование DBAL или чего-либо еще.Я просто никогда не понимал, зачем нужен дополнительный слой, и не могу найти четкого ответа в документации.

Ответы [ 2 ]

9 голосов
/ 12 февраля 2012

Нет, PDO - это «уровень доступа к данным», а не «уровень абстракции базы данных».Это означает, что вы можете переключать базы данных и по-прежнему выполнять те же вызовы методов, но PDO не будет перезаписывать sql-запросы для соответствия выбранной базе данных или эмулировать какие-либо функции базы данных.:

PDO предоставляет уровень абстракции доступа к данным, что означает, что независимо от того, какую базу данных вы используете, вы используете одни и те же функции для выдачи запросов и получения данных.PDO не обеспечивает абстракцию базы данных;он не переписывает SQL и не эмулирует отсутствующие функции.Вы должны использовать полноценный слой абстракции, если вам нужно это средство.

1 голос
/ 12 февраля 2012

Doctrine2 фактически поддерживает некоторые базы данных не PDO, поэтому это одна из причин.Также полезно взглянуть на исходный код.Класс Connection (например) имеет приятное значение:

public function insert($tableName, array $data)

, которое вставляет новую запись с завершением.

...