ホームページ  >  記事  >  バックエンド開発  >  laravel 学習ノート - データとモデルのスターター

laravel 学習ノート - データとモデルのスターター

WBOY
WBOYオリジナル
2016-06-20 12:28:13841ブラウズ

前回の記事「Laravel 学習ノート - 魔法のサービスコンテナ」から 1 年が経過しましたが、データベース部分の記事はいつリリースされるのかという質問を多くの方からいただきました。実は書きたくないのではなく、当時はほとんどの機能が使われていなかったため、メモという形で渡すことができずに書けなかったのです。 1 年が経ち、laravel をさまざまな種類のプロジェクトで使用するようになり、データベースのコンポーネントについてはほぼ完全に理解できるようになりました。学習ノートのシーケンスの重要なリンクの 1 つであるデータベース部分を改善する時期が来ました。

Laravel にはルーティング、コンテナ、Eloquent ORM という 3 つの宝物があります。Eloquent ORM は実際には Laravel フレームワーク データベース コンポーネントの一部であり、最も重要で一般的に使用されるものでもあります。 Laravel データベース コンポーネントのことを、Eloquent ORM と呼ぶことがよくあります。もちろん、データベースの記事は包括的に説明する必要があり、それはこの分野で問題に遭遇した友人の理解を助け、助けることになります。

データベースコンポーネントは、いくつかの要素にのみ依存する比較的独立したコンポーネントです。composer を通じてインストールした場合、laravel フレームワークをインストールしなくても、このコンポーネントのすべての機能をどのプロジェクトでも使用できます。具体的な使用方法は、github ホームページから入手できます: https://github.com/illuminate/database

スペースが限られており、普段はとても忙しいため、データベース部分を分割します。この記事を含め、多数の記事が存在します。この記事では、概要と記事のプレビューとして、データベース コンポーネント全体の構成について大まかに説明します。

美しい構造

Laravel データベースコンポーネントには明確な階層構造がありますが、明確な説明はありませんが、ドキュメントの構造とコードから明らかです。もちろん、Eloquent ORM が最も大きな割合を占めているため、2 ページを使ってこれに焦点を当てて説明します。

コンポーネントは大きく 3 つの層に分かれています。

  • データベース接続層
  • クエリ構築層
  • アプリケーション層

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

データベース接続レイヤー

データベース接続レイヤーは、データベース コンポーネント全体の基礎となります。これは自明のことですが、この部分は実際には ドキュメント に基づいて、次の主要な機能を提供します。

詳細 直感的で使いやすいトランザクションを実現
  • 読み取りと書き込みの分離機能
  • 複数のデータベースドライバーの互換性と切り替え
  • データベースイベント
  • この部分の機能 Facade を通じて (DB クラスを) すぐに呼び出すことができることは、明らかに、PDO または MySQLi を使用したことがある人なら誰でも、パラメーター バインディングと SQL 前処理関数をすぐに使い始めることができると説明されています。イベント処理を容易にするために、この部分では、追加、削除、変更、確認の 4 つの操作それぞれのメソッドがカプセル化されています。実際、呼び出しメソッドは同じです (どちらもカプセル化された PDO クラスと PDOStatement クラスのメソッドです)。生成される結果の種類のみが異なります。

この層は非常に低レベルです。データベースを操作するために SQL を直接記述する必要がある人は、ほとんどの場合、この層を介してアクセスできます (ただし、トランザクションは非常に一般的に使用されます)。それについては後の記事で説明します)到着)。最下層とは、データベース コンポーネントの背後にあるすべての機能がこの層を使用して実装されることを意味するため、この層を理解する必要があることに注意してください。

PDO を理解することが重要です。最新のフレームワークのデータベース部分は、基本的に PDO に基づいて実装されます。 PHP 5.3 以降のバージョンを使用していて、PDO を一度も使用したことがない、あるいは理解したことがない PHPer は、PDO が PHP 5.1 以降の組み込み拡張機能であり、PHP と一緒にリリースされたことを知っておく必要があります。

この部分は別記事では紹介せず、次の記事と併せて説明します。

クエリ構築層

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

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

最後に、次のような SQL が生成されます:
<?php$query = DB::table('users')->where('score', '>', 0)                           ->where(function (Builder $query) {                               $query->where('code', 'foo')                                     ->orWhere('name', 'like', 'Anvi%');                           })->skip(1)                           ->take(5)                           ->get();

ご覧のとおり、クエリ構築層 非常に直観的なアクセス方法を提供するため、SQL ステートメントの構築時にエラーが発生する可能性が大幅に減少します。また、メソッドを通じてアクセスされるため、特定のタイプのクエリ メソッド (この機能については後述します) を簡単にカプセル化できます。開発効率を向上させます。
SELECT * FROM users WHERE score > 0 AND (code = 'foo' OR 'name' LIKE 'Anvi%') OFFSET 1 LIMIT 5;

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

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

実際には、データベース コンポーネントには 2 つのクエリ コンストラクターがあり、1 つはクエリ構築層によって提供される基本的なネイティブ クエリ コンストラクターで、もう 1 つは Eloqent ORM の再カプセル化されたバージョンです。詳細は後述しますが、高度な相関クエリ方法です。

アプリケーション層

この層は、私たちが長い間使用してきた部分です。この層には、Eloquent ORM、移行、およびスキーマの 3 つの主要なコンポーネントが含まれています。

これら 3 つはすべてクエリ構築レイヤーに基づいて実装されています。もちろん、最後の 2 つであるデータ移行コンポーネントと構造ジェネレーターも非常に重要です。が最も重要です。ベストコンポーネント CP はペアで登場することが多いので、これら 2 つを個別に紹介します。

雄弁は最も重要な部分であり、最も重要な役割を果たします。いくつかの章に分けて紹介します。

  • モデルとデータベース (いくつかのイデオロギー的なもの)
  • 雄弁。 ORM の基礎 (Laravel モデル、Eloquent の基礎、コレクションの説明)
  • Eloquent ORM の高度なアプリケーション (再利用可能なクエリのカプセル化、イベント アプリケーション、Getter と Setter)
  • 関連クエリ (さまざまな関連モデルの応用例とコンテンツ量が多いため、関連するさまざまなクエリの問題は 2 つの記事に分けられます)

データ移行と構造ジェネレーターについては、1 つの記事で説明します。

データベースには大量のコンテンツがあるため、技術的な理由により、処理中に多くの間違いが必然的に発生する可能性があります。専門家は私を批判し、正してくれるでしょう。

初めに、私が完成したばかりの方向性ではなく、ガイドでもあるため、その後の記事のリリース中に必然的にいくつかの変更が発生しますので、注意してください。注目〜

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