前回の記事「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 つの層に分かれています。
各レイヤーに含まれる内容と、それらがドキュメントのどの部分に対応するかを見てみましょう:
データベース接続レイヤーは、データベース コンポーネント全体の基礎となります。これは自明のことですが、この部分は実際には ドキュメント に基づいて、次の主要な機能を提供します。
詳細 直感的で使いやすいトランザクションを実現この層は非常に低レベルです。データベースを操作するために SQL を直接記述する必要がある人は、ほとんどの場合、この層を介してアクセスできます (ただし、トランザクションは非常に一般的に使用されます)。それについては後の記事で説明します)到着)。最下層とは、データベース コンポーネントの背後にあるすべての機能がこの層を使用して実装されることを意味するため、この層を理解する必要があることに注意してください。
PDO を理解することが重要です。最新のフレームワークのデータベース部分は、基本的に PDO に基づいて実装されます。 PHP 5.3 以降のバージョンを使用していて、PDO を一度も使用したことがない、あるいは理解したことがない PHPer は、PDO が PHP 5.1 以降の組み込み拡張機能であり、PHP と一緒にリリースされたことを知っておく必要があります。
この部分は別記事では紹介せず、次の記事と併せて説明します。
クエリ構築層
次の方法でクエリを実行できます:
最後に、次のような 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 つを個別に紹介します。
雄弁は最も重要な部分であり、最も重要な役割を果たします。いくつかの章に分けて紹介します。
データ移行と構造ジェネレーターについては、1 つの記事で説明します。
データベースには大量のコンテンツがあるため、技術的な理由により、処理中に多くの間違いが必然的に発生する可能性があります。専門家は私を批判し、正してくれるでしょう。
初めに、私が完成したばかりの方向性ではなく、ガイドでもあるため、その後の記事のリリース中に必然的にいくつかの変更が発生しますので、注意してください。注目〜