私はしばらくDoctrine 2 ORMに取り組んできました。Doctrine ORMの場合、PDOに加えてDBALが必要な理由は何ですか?
Doctrine DBAL(データベース抽象化レイヤー)の目的は何ですか? PDO自体はデータベース抽象化レイヤーなので、ORMをPDOで直接使用できないのはなぜですか?
私はDBALなどを使用する方法を探そうとしていません。私は余分なレイヤーがなぜ必要なのか分からず、ドキュメントで明確な答えが見つからないようです。
私はしばらくDoctrine 2 ORMに取り組んできました。Doctrine ORMの場合、PDOに加えてDBALが必要な理由は何ですか?
Doctrine DBAL(データベース抽象化レイヤー)の目的は何ですか? PDO自体はデータベース抽象化レイヤーなので、ORMをPDOで直接使用できないのはなぜですか?
私はDBALなどを使用する方法を探そうとしていません。私は余分なレイヤーがなぜ必要なのか分からず、ドキュメントで明確な答えが見つからないようです。
いいえ、PDOは「データベース抽象化レイヤー」ではなく「データアクセスレイヤー」です。つまり、データベースを切り替えても同じメソッド呼び出しを行うことができますが、PDOは選択したデータベースと一致するSQLクエリーを書き直したり、データベース機能をエミュレートしたりしません。
PDOは関係なく、あなたが使っているどのデータベースの、あなたがクエリを発行し、データをフェッチするために同じ機能を使用することを意味し、データ・アクセス抽象化レイヤーを提供します。 PDOはデータベース抽象化を提供しません。 SQLを書き換えたり、欠けている機能をエミュレートしたりすることはありません。その機能が必要な場合は、完全な抽象レイヤーを使用する必要があります。
Doctrine2は実際には一部の非PDOデータベースをサポートしているため、1つの理由があります。 ソースコードを見ると便利です。
public function insert($tableName, array $data)
これは、エスケープで完了した新しいレコードを挿入します。
ソースコードを見ることは素晴らしいアイデアです。私は各ステップで何が起こっているのかを知るのに役立ちます – cantera
ありがとう - これは、レイヤ間の関係について私の理解にかなり役立ちます。 – cantera