Laravel Collection(3)カスタムメソッド
前回においてCollectionのeach()でUserのオブジェクトにageの属性を追加する処理をしましたが、今回はこれを発展させて、UserのCollectionにカスタムメソッドを追加します。
前回においてCollectionのeach()でUserのオブジェクトにageの属性を追加する処理をしましたが、今回はこれを発展させて、UserのCollectionにカスタムメソッドを追加します。
前回は、1つの値を返すCollectionのメソッドを紹介しましたが、今度はCollectionを返すメソッドの紹介です。まさにこれが実践でよく使われるものです。
Laravelをフレームワークとして使う1つの魅力は、Collectionにあります。Eloquentでデータベースから取得した後のレコード処理がとてもエレガントにわかりやく書くことができます。というものの、Laravelのマニュアルに出てくるCollectionの例は配列ベースをcollect()したものばかりで物足りません。ということで、ここでCollectionの紹介を兼ねてDBからの取得にCollectionのメソッドを適用する例を掲載します。
Artisanコマンドはコマンドラインで手動で実行するだけでなく、クロンジョブでの実行でも使用します。時間を設定して自動的に実行されるゆえに、実際に実行されたのか、どれだけ時間かかったのか、いくつのレコードを処理したのかなどをログに記録しておきたいです。そして、わかりやすいようにコマンドごとに違うログファイルを作成したいです。となると、config/logging.phpでそれぞれのコマンドのチャンネルを作成することになるのでしょうか? つまり50個コマンドあれば50個のチャンネルの作成です。それは面倒だな、ということで良いアイデアを思いつきました。
デフォルトのインストールでは、laravel.logは日次ではローテーションされません。つまり一生同じファイルにエラーなどが記録され続けます。それが嫌ならどうしましょう?
ログファイルを作成するのは、デバッグのためや後のチェックに使われるために実行の記録を残すなど、いろいろな目的で使われます。Laravelでは、laravel.logというファイルがデフォルトでstorage/logsに作成されて、そこでいろいろな情報を記録するのに使われます。しかし、特定のプログラムの実行でlaravel.logではないファイルにログを残したいときはどうしましょう?
Laravelはプログラム実行において読み込むファイルの数は非常に多いです。実行速度を最適化するにはいろいろな方法がありますが、一番簡単に実行できる方法があります。遠い昔にも紹介しましたが、ルートのキャッシュです。しかし、バージョン7への更新によりちょっと問題が発生です。
これも前回と同様に、開発したプログラムに今まであったバグがLaravelの更新により表面化したという話です。
Laravel6からLaravel7へのバージョン更新で起こった問題を深~く追及していったら、私のプログラムのバグの発見とともにLaravelフレームワークの内部の変更の背景を知ることになりました。
最新のLaravelのバージョンは8.xなことはわかっています。私が新しいもの嫌いというわけでもありません。しかし、リリースされてからちょっと遅れて(1年近く経って)、Laravelのバージョン7.xのインストールの手順の紹介です。