ホームページ >バックエンド開発 >PHPチュートリアル >Laravel5.2のEloquentクラスとDBクラスの違いは何ですか?
例を挙げてください、ありがとう!
例を挙げてください、ありがとう!
この回答は私のブログ記事「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 クラスのメソッドです)。生成される結果の種類のみが異なります。
PDO
クエリ構築レイヤー
クエリ構築層は
で構成され、アプリケーション層と最下位層の間の通信のブリッジとして、開発者がエレガントな形式でクエリを作成できるように、スムーズなアクセス インターフェイスを提供します。最新のフレームワークはそのような機能を提供しますが、PHP の優れた機能の多くを使用してそれを実装するフレームワークは Laravel のようなものはほとんどありません。
リーリー
查询构造器
和 (语法)生成器
これにより、最終的に次のような SQL が生成されます:
ご覧のとおり、クエリ構築レイヤーのクエリ コンストラクターは、非常に直感的なアクセス方法を提供しており、SQL ステートメントを構築する際のエラーの可能性が大幅に減少します。また、メソッドを通じてアクセスされるため、特定のタイプを簡単に実行できます。開発効率を向上させるためのクエリ メソッドのカプセル化 (この機能については後述します)。
使用される where や groupBy などのメソッドはすべて、クエリ コンストラクターによって提供されるメソッドであることを常に覚えておいてください。これは、開発中に、どのメソッドがどのレイヤーとどのクラス インスタンス オブジェクトによって提供されるかを明確にする必要があります。これは、不要な間違いを避けるのに役立ちます。クエリ ビルダーは洗練されたアクセス方法を提供し、SQL ステートメントの最終出力は (文法) ジェネレーターであり、現在選択されているデータベース ドライバーに基づいて対応する SQL ステートメントを生成し、最終的にクエリ ビルダーに返します。使い方は簡単です。バインドされたパラメータに基づいて、データベース接続層を呼び出してクエリ結果を返します。実際には、データベース コンポーネントには 2 つのクエリ コンストラクターがあり、1 つはクエリ構築レイヤーによって提供される基本的なネイティブ クエリ コンストラクターで、もう 1 つは Eloqent ORM の再カプセル化されたバージョンであり、
はより高度なクエリ コンストラクターを提供します。クエリメソッド
アプリケーション層 このレイヤーは、私たちが長い間使用してきた部分です。このレイヤーには 3 つの主要なコンポーネントが含まれています。
Eloquent ORM
、Migration
、Schema
アプリケーション層として、下位レベルのコンポーネントに基づいて実装する必要があるため、混乱が生じます。実際、考えてみてください。これは、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 の簡略化など、すべてではありませんが、多くのことを自動化するのに役立ちます。