この記事では主に、laravel スキルにおけるクエリビルダーのオーバーレイチェーン呼び出しに関する情報を紹介します。この記事は、皆さんの学習や仕事に役立つことを願っています。みんなを助けてください。
クエリビルダーの紹介
Laravelクエリビルダーは、データベース検索構文を確立および実行するための便利で流暢なインターフェイスを提供します
PDOパラメータバインディングを使用してアプリケーションをSQLインジェクションから保護します。したがって、受信パラメータを特殊文字でエスケープする必要はありません
基本的にすべてのデータベース操作に対応でき、サポートされているすべてのデータベースシステムで実行できます
はじめに
今日はlaravelクエリの小規模バージョンを紹介しますコンストラクター 公式ドキュメントのサンプルには詳しく記載されていないため、あまり高度なテクニックではないので、知らない人も参考にしてみてください。
ビジネス コードでは、さまざまな条件に基づいてクエリが実行されることがよくあります。簡単な例として、新しい順に並べられたユーザー リストをクエリしたいとします。ステータスとタイプを条件として使用できます。
最初にこのように書きました
if($status && $type) { $users = User::where('status', $status)->where('type', $type)->latest()->get(); } else if ($status) { $users = User::where('status', $status)->latest()->get(); } else if ($type) { $users = User::where('status', $type)->latest()->get(); } else { $users = User::latest()->get(); }
このコードは本当に醜くて、->latest()->get()などの一般的なコードの多くは4回書かれています, if the product 今日は順番に並べたいと言う場合、4 か所を変更する必要があります。エディターを使用して簡単に変更できますが、これは最も単純な例にすぎないことを知っておく必要があります。
ドキュメントを読むと、条件判断のための when メソッドがあり、クロージャの束は理想的ではありません。もっとエレガントな書き方があるに違いないと強く信じていたので、stackoverflow で検索したところ、案の定、全能の Waiguoren が答えをくれました。
記述方法の改善:
$query = User::query(); // 如果用DB: $query = DB::table('user'); if ($status) { $query->where('status', $status); } if ($type) { $query->where('type', $type); } $users = $query->latest()->get();
変数を使用してクエリ コンストラクター インスタンスを保存し、それに制約を重ねて、最後にコレクションを取得します。公開部分が最初と最後に配置されており、構成が明確になっているのでしょうか。
また、 $query をパラメータとしてメソッドまたは関数に渡し、共通のロジックをカプセル化して複数の呼び出しを容易にすることもできます:
function foo($query) { $query->with(['girl', 'gay']) ->latest() ->get(); } $query = User::query(); $users = foo($query);
このメソッドの記述については、呼び出し後に注意事項があります。 $query の where およびその他の制約メソッドによって、このクエリが変更されることがあります。場合によっては、事前にクエリを複製する必要があります。
たとえば、タイプ 1 と 2 のユーザーを同時に取得したいとします
$query_1 = User::query(); $query_2 = clone $query_1; $users_1 = $query_1->where('type', 1)->latest()->get(); $users_2 = $query_2->where('type', 2)->latest()->get(); // 错误 $users_2 = $query_1->where('type', 1)->latest()->get(); // 这样写得到得是type = 1 and $type = 2
laravel のドキュメントにはそのような例はありませんが、次のように記載されています:
DB ファサード テーブル メソッドはクエリを開始します。 table メソッドはクエリ テーブルのクエリ ビルダー インスタンスを返すため、クエリ時にさらに多くの制約を連鎖させることができ、get メソッドを使用して最終結果を取得できます。
関連する推奨事項:
Laravel 学習 - データベース操作とクエリ コンストラクターのサンプル コード共有
以上がLaravelクエリビルダー クエリビルダーオーバーレイチェーン呼び出しメソッドのチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。