ORMを使用する場合はORMを使用してください。それ以外の場合は、DBALを使用してください。以下に、あなたが実際に何をしているかについていくつかの詳細を見つけることができます。
DBALは、を表します。データベース抽象化レイヤ。ドライバやクエリ構文のようなデータベース特有のものを抽象化しようとするので、コードを変更することなくそれらを交換することができます。 オブジェクトリレーショナルマッピングの略
ORMは、これはさらにDBALより移行して、アプリケーション内の実際のクラスにデータベーススキーマをバインドしようとします。
これらの両方にはクエリビルダーが付属しています。 DBALクエリビルダは、複数のドライバ/データベースとの互換性のみを提供するため、より基本的です。あなたはまだテーブルを操作していますが、それでも結果として行が得られます。一方、ORM問合せビルダーは、エンティティ(データベース・スキーマがバインドされているクラス)を処理するように設計されています。例えば
、DBALクエリ:ここ
$builder->select('u.id, e.id, e.email')
->from('users', 'u')
->leftJoin('u', 'emails', 'e', 'u.id = e.user_id')
->where('u.id = :id')
->setParameter(':id', $id);
$rows = $builder->execute()->fetchAll();
、我々はID $id
で、ユーザーのすべての電子メールアドレスを取得するには、emails
テーブルでusers
のテーブルを結合するクエリを作成します。結果は連想配列の形になります。今度は、ORMを見てみましょう。ここでは
$builder->select('u','e')
->leftJoin('u.emails', 'e')
->where('u.id = :id')
->setParameter(':id', $id);
$user = $builder->getQuery()->getOneOrNullResult();
を、我々は彼のEmail
電子メールアドレスのすべてにID $id
とUser
を取得したいと言います。彼らがどのような表から来ているのか、それとも何が関係しているのかは気にしません。あなたが得るものはEmail
オブジェクトのコレクションを持つUser
クラスのインスタンスです。ORMマッピングのおかげで、すべてが適切なデータで埋められました。