0

私はずっと前にデータベースクラスを作成し、プロジェクトで常に使用していました。

このようなもの:

class Database
{
     function query($sqlQuery) {
         $this->prepare($sqlQuery);
     }

     function connect($databaseConnectionValues) { }

     function read() { }

     function prepare() { }

     ...etc
}

Laravel のようなフレームワークは、まったく異なる方法でそれを行います。SQL を実行することはありません。

このようなもの:

$users->find('Demo')->select('email')->get();

これについて2つ質問させていただきます。

質問 1: 2 番目のコードは「ORM」と呼ばれていると思いますが、「データベース抽象化レイヤー」とは何ですか? また、データベースには何層ありますか? (彼らの名前がわかったら、さらに調査を行うことができます。)

質問 2: ORM を使用する必要があるのはなぜですか?

4

1 に答える 1

1

スキニーは次のとおりです。

  1. データベース抽象化レイヤー = データベースの機能と構文を受け取り、それらをプログラムで使用するために再パッケージ化するツール。
  2. ORM = データベースの抽象化を含むオブジェクト リレーショナル マッパーは、さらに一歩進んで、プログラム オブジェクトを介してテーブル間の関係を管理できます。

これにより、このコード スニペットがデータベース抽象化レイヤーになります。

$users->find('Demo')->select('email')->get(); 

次のような構文があるとします。

$users->join('Friends')->find('Demo')->select('email')->get();

または同様に、ORMを手元に持っているでしょう。

ORM が役立つのは、結合クエリを実行する必要があり、複数のテーブルからの結果を独自のモデルに適切に事前にパッケージ化し、適切に整理したい場合だけです。例:

$u = $user->join('friends')->where('name', 'mike')->get();

echo $u->name; // would be mike;
echo $u->friends[0]->name; // would be the name of another user who's mike's friend

もちろん、これはすべて非常に概念的であり、フレームワークに依存しません。この場合、選択したユーザーの友達であるすべてのユーザーとの「friends」プロパティをロードするモデル クラスで関係が定義されます。

テーブルで結合を行っていない場合は、選択したフレームワークに ORM 機能がある場合でも、ORM 機能について心配する必要はありません。必要な場合にのみ使用する必要があります。

于 2013-03-05T06:55:06.303 に答える