Laravelクエリビルダー クエリビルダーオーバーレイチェーン呼び出しメソッドのチュートリアル

小云云
リリース: 2023-03-17 21:14:01
オリジナル
2171 人が閲覧しました

この記事では主に、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 メソッドを使用して最終結果を取得できます。

関連する推奨事項:

クエリ コンストラクターに関するおすすめ 7 つの記事

Laravel 学習 - データベース操作とクエリ コンストラクターのサンプル コード共有

ThinkPHP5 のクエリ コンストラクターの仕組み

以上がLaravelクエリビルダー クエリビルダーオーバーレイチェーン呼び出しメソッドのチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!