ホームページ  >  記事  >  バックエンド開発  >  Laravelスキル クエリビルダーオーバーレイチェーン呼び出しメソッド解説

Laravelスキル クエリビルダーオーバーレイチェーン呼び出しメソッド解説

jacklove
jackloveオリジナル
2018-07-06 17:36:181884ブラウズ

この記事では主に、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 回記述します。製品が「今日は順番に並べ替えたい」と指示した場合、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);

この書き方の注意点は、where on $queryなどの制約メソッドを呼び出すとクエリが変更されてしまうため、場合によっては事前にクエリのクローンを作成しておく必要があることです。

たとえば、タイプ 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 ファサードのテーブル メソッドを使用してクエリを開始できます。このテーブル メソッドはクエリ テーブルのクエリ ビルダー インスタンスを返すため、クエリ時にさらに多くの制約を連鎖させ、get メソッドを使用して最終結果を取得できます


余談

Previous I Baidu しか知らないプログラマは要らない、という先輩の意見も聞きましたが、当時は Google を使っていなかったので、すべての検索エンジンではなく、非常に見栄を張ったものだと感じていました。今では、Baidu しか知らない人と仕事をしたくありません。Baidu は単なる広告検索であり、検索結果はすべてナンセンスです。

Google と stackoverflow は本当に優れています。その多くは豊富な知識と専門的な回答を持っています。コンピューターの歴史からオペレーティング システム、データベース、さまざまなプログラミング言語に至るまで、多くのバグのデバッグに役立ちました。セグメント違反でこのように宣伝するのは悪いことですか? 逃げてください!

#概要参考:


    使用して複数の where 句クエリを作成する方法Laravel Eloquent? - stackoverflow
  1. Model::query - laravelAPI

興味があるかもしれない記事:

フィボナッチ数列を実装するための PHP コードの共有


二分法に基づく配列検索関数の PHP 実装の例説明


phpのクラスとオブジェクトの詳しい説明


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

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