ホームページ  >  記事  >  バックエンド開発  >  Laravel5.2のEloquentクラスとDBクラスの違いは何ですか?

Laravel5.2のEloquentクラスとDBクラスの違いは何ですか?

WBOY
WBOYオリジナル
2016-07-06 13:51:441213ブラウズ

例を挙げてください、ありがとう!

返信内容:

例を挙げてください、ありがとう!

この回答は私のブログ記事「Laravel Learning Notes - Getting Started with Data and Models」(https://www.insp.top/article/learn-laravel-database-and-model-foundation) からの抜粋です。質問は削除され編集されています。詳しく知りたい場合は、元のテキストを読んでください。

これらを理解するために、まずデータベース コンポーネント (つまり Eloquent ORM) について見てみましょう

データベースコンポーネントは大きく 3 つの層に分かれています:

  • データベース接続層

  • クエリ構築レイヤー

  • アプリケーション層

各レイヤーに何が含まれているか、そしてそれらがドキュメントのどの部分に対応しているかを見てみましょう:

データベース接続層

データベース接続層はデータベース コンポーネント全体が依存する基礎です。これは自明のことですが、この部分は実際には カプセル化に基づいていることがわかります。次の主な機能を提供します: PDOより直感的で使いやすい取引

  • 読み書き分離機能

  • 複数のデータベースドライバーの互換性と切り替え

  • データベースイベント

  • 関数のこの部分は、Facade (DB クラス) を通じてすぐに呼び出すことができます。これについてはドキュメントですでに説明されています。

    または MySQLi を使用したことがある方は、パラメーター バインディングと SQL 前処理関数をすぐに使い始めることができます。イベント処理を容易にするために、この部分では、追加、削除、変更、確認の 4 つの操作それぞれのメソッドがカプセル化されています。実際、呼び出しメソッドは同じです (どちらもカプセル化された PDO クラスと PDOStatement クラスのメソッドです)。生成される結果の種類のみが異なります。
この層は非常に低レベルです。データベースを操作するために SQL を直接記述する必要がある人は、ほとんどの場合、この層を介してアクセスできます (ただし、トランザクションは非常に一般的に使用されます。これについては後で説明します)。後の記事で)。最下層とは、データベース コンポーネントの背後にあるすべての機能がこの層を使用して実装されることを意味するため、この層を理解する必要があることに注意してください。

PDOクエリ構築レイヤー

クエリ構築層は

で構成され、アプリケーション層と最下位層の間の通信のブリッジとして、開発者がエレガントな形式でクエリを作成できるように、スムーズなアクセス インターフェイスを提供します。最新のフレームワークはそのような機能を提供しますが、PHP の優れた機能の多くを使用してそれを実装するフレームワークは Laravel のようなものはほとんどありません。

次の方法でクエリを実行できます:

リーリー 查询构造器(语法)生成器これにより、最終的に次のような SQL が生成されます:

リーリー

ご覧のとおり、クエリ構築レイヤーのクエリ コンストラクターは、非常に直感的なアクセス方法を提供しており、SQL ステートメントを構築する際のエラーの可能性が大幅に減少します。また、メソッドを通じてアクセスされるため、特定のタイプを簡単に実行できます。開発効率を向上させるためのクエリ メソッドのカプセル化 (この機能については後述します)。

使用される where や groupBy などのメソッドはすべて、クエリ コンストラクターによって提供されるメソッドであることを常に覚えておいてください。これは、開発中に、どのメソッドがどのレイヤーとどのクラス インスタンス オブジェクトによって提供されるかを明確にする必要があります。これは、不要な間違いを避けるのに役立ちます。

クエリ ビルダーは洗練されたアクセス方法を提供し、SQL ステートメントの最終出力は (文法) ジェネレーターであり、現在選択されているデータベース ドライバーに基づいて対応する SQL ステートメントを生成し、最終的にクエリ ビルダーに返します。使い方は簡単です。バインドされたパラメータに基づいて、データベース接続層を呼び出してクエリ結果を返します。

実際には、データベース コンポーネントには 2 つのクエリ コンストラクターがあり、1 つはクエリ構築レイヤーによって提供される基本的なネイティブ クエリ コンストラクターで、もう 1 つは Eloqent ORM の再カプセル化されたバージョンであり、

はより高度なクエリ コンストラクターを提供します。クエリメソッド

アプリケーション層 このレイヤーは、私たちが長い間使用してきた部分です。このレイヤーには 3 つの主要なコンポーネントが含まれています。

これら 3 つはすべてクエリ構築レイヤーに基づいて実装されています。もちろん、最後の 2 つ、つまりデータ移行コンポーネントと構造ジェネレーターも

としてペアとして使用されます。の姿。

Eloquent ORMMigrationSchemaアプリケーション層として、下位レベルのコンポーネントに基づいて実装する必要があるため、混乱が生じます。実際、考えてみてください。これは、ORM がそれを再度カプセル化し、より多くの機能 (主に関連クエリ) を提供することに他なりません。

1 つは ORM モデルとして動作する (より洗練されているように見えます)、もう 1 つはデータセットを直接操作して返すものですか? !私自身の理解です。 。 。

Eloquent は ORM であり、DB はネイティブ SQL を使用して直接操作されます。
雄弁:Post::where('id','<',3)->orderBy('id','desc')->take(1)->get();<code>Post::where('id','<',3)->orderBy('id','desc')->take(1)->get();
DB:DB::insert('insert into users (id, name, email, password) values (?, ?, ? , ? )', [1, 'Laravel','laravel@test.com','123']);DB:DB::insert('ユーザー (ID、名前、電子メール、パスワード) 値に挿入 (?, ?, ? , ? )', [1, 'Laravel','laravel @test .com','123']);
DB ファサードについては、Laravel データベース インスタンスのチュートリアル - DB ファサードを使用してデータベースを操作するを参照してください

Eloquent は ORM であり、テーブル間の直接マッピング関係の処理や SQL の簡略化など、すべてではありませんが、多くのことを自動化するのに役立ちます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。