こんにちは ?
それでは、クエリ スコープについて話しましょう。これらは素晴らしいもので、クエリがはるかに読みやすくなることは間違いありません。でも、彼らについて私が嫌いなことが 1 つあります。それは魔法です。また、全員がバックエンド開発者ではないチームで作業していると、チームの生活が悲惨になる可能性があります。確かに、PHPDoc を追加することはできますが、常に何らかの魔法が起こっています。これまでスコープを使用したことがなくても、心配する必要はありません。しっかりと取り組んでください。
では、スコープとは何でしょうか? ?
次のコードを考えてみましょう:
use App\Models\User; $users = User::query() ->where('votes', '>', 100); ->where('active', 1); ->orderBy('created_at') ->get();
これが通常のクエリの作成方法です。ただし、クエリが複雑すぎたり、読みにくくなった場合は、クエリをスコープに抽象化できます。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; class User extends Model { public function scopePopular(Builder $query): void { $query->where('votes', '>', 100); } public function scopeActive(Builder $query): void { $query->where('active', 1); } }
これで次のことができるようになります:
$users = User::query() ->popular() ->active() ->orderBy('created_at') ->get();
読みやすくなりましたね?知っている。しかし問題は、オートコンプリートが表示されないことです。これは IDE にとっては闇の魔法です。スコープは実行時に解決され、スコープという接頭辞が付けられるため、ユーザーがサポートしない限り、IDE がスコープについて知ることはできません。
1 つの方法は、次のように PHPDoc を使用することです。
/** * @method static Builder popular() * @method static Builder active() */ class User extends Model
スコープのもう一つの欠点は?最も頻繁に使用されるモデルは、無駄に大量のモデルを搭載して肥大化してしまいます。私はモデルをざっと読んで、大量のクエリ抽象化ではなく、関係性とコア ロジックをすぐに確認するのが大好きです。
そうか?スコープを捨てて先に進むのでしょうか?まあ、それはオプションですが、カスタム クエリ ビルダーを使用することもできます。
カスタムクエリビルダー?
名前が示すように、カスタム クエリ ビルダーを使用すると、すべてのクエリ抽象化を専用のクラスに移動できます。コードはある意味でより整理されます。
新しいクラス UserQueryBuilder を作成しましょう:
<?php namespace App\Eloquent\QueryBuilders; use App\Models\User; use Illuminate\Database\Eloquent\Builder; class UserQueryBuilder extends Builder { public function popular(): self { return $this->where('votes', '>', 100); } public function active(): self { return $this->where('active', 1); } }
ビルダーをどこに配置するか?ガイドラインはありませんが、個人的には app/Eloquent/QueryBuilders に配置することを好みます。
次に、このビルダーを User モデルで使用してみましょう:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; class User extends Model { public function newEloquentBuilder($query): UserQueryBuilder { return new UserQueryBuilder($query); } // for type hints public static function query(): UserQueryBuilder { return parent::query(); } }
このようにして、次のことができるようになります:
$users = User::query() ->popular() ->active() ->orderBy('created_at') ->get();
全く同じように動作し、完全なオートコンプリートが得られます。さらに、コードナビゲーションは完璧に機能し、必要な場所に移動します?
もう 1 つの優れた点は、必要に応じてクエリ ビルダーを動的に解決できることです。
public function newEloquentBuilder($query): UserQueryBuilder { if ($this->status === State::Pending) { return new PendingUserQueryBuilder($query); // extends UserQueryBuilder } return new UserQueryBuilder($query); }
この方法では、クエリをコンテキスト (状態など) ごとにグループ化できる場合に、1 つの大きなクエリ ビルダーを使用する必要がなくなります。
以上です✅
スコープはクールなので、2 ~ 3 個しか持っていないとしても、使い続けるつもりです。しかし、物事が手に負えなくなり始めた場合は、カスタム クエリ ビルダーが最適です。コードをクリーンで整理し、保守しやすくするため、余分な努力をする価値がありますか?
以上がスコープを介した Laravel カスタムクエリビルダーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PhpisusedForsedingEmailsDueToitsIttegration withServerMailServicesAndExternalSmtpproviders、自動化とMarketingCampaign.1)SetupYourphpenvironment withebeBironment witheBiserverandphp、保証

メールを送信する最良の方法は、PHPMailerライブラリを使用することです。 1)Mail()関数を使用することはシンプルですが信頼できないため、電子メールがスパムを入力するか、配信できない場合があります。 2)PHPMailerは、より良い制御と信頼性を提供し、HTMLメール、添付ファイル、SMTP認証をサポートします。 3)SMTP設定が正しく構成されていることを確認し、暗号化(StartTLSやSSL/TLSなど)を使用してセキュリティを強化します。 4)大量の電子メールについては、メールキューシステムを使用してパフォーマンスを最適化することを検討してください。

customedersandaddadvancedfeaturesinphpemailentalitylivainability.1)customederadddetadata fortrackingandcategorization.2)htmLemailsallowStingtintintintintintinteractivity.3)添付物質の添付物質の添付

PHPとSMTPを使用してメールを送信することは、PHPMailerライブラリを介して実現できます。 1)PHPMailerをインストールして構成する、2)SMTPサーバーの詳細を設定する、3)電子メールコンテンツを定義し、4)メールを送信してエラーを処理します。この方法を使用して、電子メールの信頼性とセキュリティを確保します。

BestappRoachforseminginphpisusingthephpmailerlibrarydueToitsReliability、featurrichness、andeaseofuse.phpmailerSupportssmtpは、detairederorhandlingを提供します

依存関係注射(DI)を使用する理由は、コードのゆるい結合、テスト可能性、および保守性を促進するためです。 1)コンストラクターを使用して依存関係を注入します。2)サービスロケーターの使用を避け、3)依存関係噴射コンテナを使用して依存関係を管理する、4)依存関係を注入することでテスト可能性を向上させる、5)注入依存性を回避、6)パフォーマンスに対するDIの影響を考慮します。

phpperformancetuningisucial cuseenhancess andandandadsand。

bestpracticesforsendingemails securlyinphpinclude:1)sutureconsmttarttlsencryptionとの使用の使用、2)検証およびサンシジン化のinputStopReventinjectuctacks、3)adinitivedinitivedInemailsopenslsl、4)adlinglinglingemailoaに


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。
