2012-02-11 1 views
3

私はしばらくDoctrine 2 ORMに取り組んできました。Doctrine ORMの場合、PDOに加えてDBALが必要な理由は何ですか?

Doctrine DBAL(データベース抽象化レイヤー)の目的は何ですか? PDO自体はデータベース抽象化レイヤーなので、ORMをPDOで直接使用できないのはなぜですか?

私はDBALなどを使用する方法を探そうとしていません。私は余分なレイヤーがなぜ必要なのか分からず、ドキュメントで明確な答えが見つからないようです。

答えて

9

いいえ、PDOは「データベース抽象化レイヤー」ではなく「データアクセスレイヤー」です。つまり、データベースを切り替えても同じメソッド呼び出しを行うことができますが、PDOは選択したデータベースと一致するSQLクエリーを書き直したり、データベース機能をエミュレートしたりしません。

Per PHP PDO docs

PDOは関係なく、あなたが使っているどのデータベースの、あなたがクエリを発行し、データをフェッチするために同じ機能を使用することを意味し、データ・アクセス抽象化レイヤーを提供します。 PDOはデータベース抽象化を提供しません。 SQLを書き換えたり、欠けている機能をエミュレートしたりすることはありません。その機能が必要な場合は、完全な抽象レイヤーを使用する必要があります。

+0

ありがとう - これは、レイヤ間の関係について私の理解にかなり役立ちます。 – cantera

1

Doctrine2は実際には一部の非PDOデータベースをサポートしているため、1つの理由があります。 ソースコードを見ると便利です。

public function insert($tableName, array $data) 

これは、エスケープで完了した新しいレコードを挿入します。

+0

ソースコードを見ることは素晴らしいアイデアです。私は各ステップで何が起こっているのかを知るのに役立ちます – cantera

関連する問題