Eloquent モデルを使用する場合、モデルのライフサイクルを通じてディスパッチされるイベントを利用するのが一般的です。これを行うにはいくつかの異なる方法があり、このチュートリアルではそれらを取り上げ、それぞれの長所と短所を説明します。 [関連する推奨事項: laravel ビデオ チュートリアル ]
直接比較できるように、各メソッドに同じ例を使用します。この例では、モデル自体の作成中に、モデルの UUID プロパティを UUID に割り当てます。
最初のアプローチでは、モデルの静的ブートストラップ メソッドを使用して動作を登録します。これにより、モデルを直接操作し、モデルの作成時にモデルを作成できるようになります。
declare(strict_types=1); namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; class Office extends Model { public static function boot(): void { static::creating(fn (Model $model) => $model->uuid = Str::uuid(), ); } }
このアプローチは、非常に理解しやすく、モデルで何が起こっているかを正確に確認できるため、UUID の追加など、モデル イベントに対する小規模で直接的な反応に最適です。このアプローチの最大の問題はコードの重複です。UUID を割り当てる必要があるモデルが複数ある場合、同じことを繰り返し行うことになります。
これにより、機能を使用する 2 番目のアプローチにうまくつながります。 Laravel では、boot
で始まりトレイト名で終わるトレイトのメソッドを作成すると、モデルはトレイトを継承して自動的に開始できます。以下に例を示します。
declare(strict_types=1); namespace App\Models\Concerns; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; trait HasUuid { public static function bootHasUuid(): void { static::creating(fn (Model $model) => $model->uuid = Str::uuid(), ); } }
トレイトを使用すると、この動作を必要とするすべてのモデルにこの動作を追加でき、実装が簡単になります。私の最大の欠点は、複数の機能が同じモデル イベントを利用したい場合に、これらの動作を積み重ねると問題が発生する可能性があることです。彼らは優先順位をめぐって争い始め、すぐに混乱してしまいます。
これにより、次のオプションであるモデル オブザーバーが表示されます。モデル オブザーバーは、モデル イベントに応答するクラスベースの方法であり、メソッドはトリガーされた特定のイベントに対応します。
declare(strict_types=1); namespace App\Observers; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; class OfficeObserver { public function creating(Model $model): void { $model->uuid = Str::uuid(); } }
このクラスは、サービス プロバイダーまたはモデル自体のどこかに登録する必要があります (これをお勧めします)。このオブザーバーをモデルに登録すると、雄弁な動作の変化による副作用をモデル レベルで確認できるようになります。サービスプロバイダーからそれを隠す場合の問題は、誰もがその存在を知らない限り、それを知るのが難しいことです。このアプローチの最大の欠点は、その可視性です。私の意見では、この方法は正しく使えば素晴らしいものです。
この問題を解決するもう 1 つの方法は、Eloquent モデル自体の $dispatchesEvents
プロパティを利用することです。これは、すべての Eloquent モデルのプロパティであり、リッスンするイベントと、それらのイベントに対して呼び出すクラスをリストすることができます。
declare(strict_types=1); namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; class Office extends Model { protected $dispatchesEvents = [ 'creating' => SetModelUuid::class, ]; }
SetModelUuid
は、Eloquent モデルのライフ サイクル中にインスタンス化されます。これは、モデルに動作とプロパティを追加する機会となります。
declare(strict_types=1); namespace App\Models\Events; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; class SetModelUuid { public function __construct(Model $model) { $model->uuid = Str::uuid(); } }
このアプローチは、モデルの可視性が高く、このクラスをモデル間で簡単に共有できるため、最もクリーンで理解しやすいアプローチの 1 つです。直面する最大の疑問は、モデル イベントに対して複数のアクションをトリガーする必要があるかどうかです。
とにかく、正直に言って、これを行う正しい方法はありません。上記の方法のいずれかを選択でき、すべて機能しますが、自分と特定の使用例に適した方法を選択する必要があります。この特定の機能に関するオプションをもっと増やしてほしいと思います。
たとえば、モデル イベントでモデルに複数のプロパティを追加する必要がある場合は、オブザーバーが適しています。しかし、これが最善の選択肢でしょうか?このモデルのカスタム パイプラインを実行するためにディスパッチ イベント属性を使用するとどうなるでしょうか?
declare(strict_types=1); namespace App\Models\Pipelines; use App\Models\Office class OfficeCreatingPipeline { public function __construct(Office $model) { app(Pipeline::class) ->send($model) ->through([ ApplyUuidProperty::class, TapCreatedBy::class, ]); } }
ご覧のとおり、パイプラインの使用を開始して、イベント モデリング用の複数の動作を追加できます。これはまだテストされていないので、それが可能かどうかは 100% わかりませんが、概念としては、モデル イベントに反応する構成可能な方法を開く可能性があります。
Laravel プロジェクトでモデル イベントをどのように処理しますか? Twitterで教えてください!
元のアドレス: https://laravel-news.com/working-with-laravel-model-events
翻訳アドレス: https://learnku.com/laravel/ t/71183
プログラミング関連の知識については、プログラミング ビデオをご覧ください。 !
以上がLaravelでモデルイベントを使用する方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

LaravelまたはPythonの選択は、プロジェクトの要件に依存します。1)Webアプリケーションをすばやく開発し、ORMと認証システムを使用する必要がある場合は、Laravelを選択します。 2)データ分析、機械学習、または科学的コンピューティングが含まれる場合は、Pythonを選択します。

LaravelはWebアプリケーションを迅速に構築するのに適しており、Pythonは柔軟性と汎用性を必要とするプロジェクトに適しています。 1)Laravelは、PHPエコシステムに適したORMやルーティングなどの豊富な機能を提供します。 2)Pythonは、簡潔な構文と強力なライブラリエコシステムで知られており、Web開発やデータサイエンスなどのフィールドに適しています。

LaravelとPHPを使用して、動的なWebサイトを効率的に楽しく作成します。 1)LaravelはMVCアーキテクチャに従い、ブレードテンプレートエンジンはHTMLの書き込みを簡素化します。 2)ルーティングシステムと要求処理メカニズムにより、URL定義とユーザー入力処理が簡単になります。 3)Eloquentormはデータベース操作を簡素化します。 4)データベースの移行、CRUD操作、ブレードテンプレートの使用は、ブログシステムの例を介して実証されています。 5)Laravelは、強力なユーザー認証と承認機能を提供します。 6)デバッグスキルには、ロギングシステムと職人ツールの使用が含まれます。 7)パフォーマンスの最適化の提案には、怠zyなロードとキャッシュが含まれます。

Laravelは、ブレードテンプレートエンジン、Eloquentorm、Artisan Tools、Laravelmixを介してフルスタック開発を実現します。1。ブレードは、フロントエンド開発を簡素化します。 2. Eloquentはデータベース操作を簡素化します。 3。職人は開発効率を向上させます。 4。Laravelmixは、フロントエンドリソースを管理します。

Laravelは、MVCアーキテクチャモデルに従い、豊富なツールと機能を提供し、Web開発プロセスを簡素化する最新のPHPベースのフレームワークです。 1)データベースインタラクション用のEloquentorm、2)高速コード生成のための職人コマンドラインインターフェイス、3)効率的なビュー開発のためのブレードテンプレートエンジン、4)URL構造を定義するための強力なルーティングシステム、5)ユーザー管理のための認証システム、6)リアルタイム機能のためのイベントリスニングとブロードキャスト、7)パフォーマンスを維持するためのパフォーマンスを維持します。

LaravelはWebアプリケーションを迅速に構築するのに適していますが、Pythonはより広い範囲のアプリケーションシナリオに適しています。 1.Laravelは、Web開発を簡素化するために、Eloquentorm、Bladeテンプレートエンジン、職人ツールを提供します。 2。Pythonは、その動的なタイプ、リッチ標準ライブラリ、サードパーティのエコシステムで知られており、Web開発、データサイエンス、その他の分野に適しています。

LaravelとPythonにはそれぞれ独自の利点があります。Laravelは、機能が豊富なWebアプリケーションを迅速に構築するのに適しており、Pythonはデータサイエンスと一般的なプログラミングの分野でうまく機能します。 1.Laravelは、最新のWebアプリケーションの構築に適したEloquentormおよびBladeテンプレートエンジンを提供します。 2。Pythonには豊富な標準的な図書館とサードパーティライブラリがあり、DjangoとFlaskのフレームワークはさまざまな開発ニーズを満たしています。

Laravelは、コード構造を明確にし、開発プロセスをより芸術的にすることができるため、選択する価値があります。 1)LaravelはPHPに基づいており、MVCアーキテクチャに従い、Web開発を簡素化します。 2)Eloquentorm、Artisan Tools、Bladeテンプレートなどのコア機能は、開発の優雅さと堅牢性を高めます。 3)ルーティング、コントローラー、モデル、ビューを通じて、開発者はアプリケーションを効率的に構築できます。 4)キューやイベントモニタリングなどの高度な機能により、アプリケーションのパフォーマンスがさらに向上します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

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

SublimeText3 中国語版
中国語版、とても使いやすい

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

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール
