新旧が共存することが可能か検証してみた2022/03/27に公開2024/10/16LaravelPHPtechLaravel8でモデルファクトリがクラスベースに書き直され、それを楽に修正するために以前こんな記事を書きました。https://zenn.dev/naopusyu/articles/cc68a0aa827bcaただ、ツールを使って一気に修正することが困難なときもあると思うので、あとから修正する場合に新旧の書き方が共存することが可能なのか検証してみました。Sailで作っています。事前準備Laravel7までの旧モデルファクトリを使うためにlaravel/legacy-factoriesパッケージを入れておきます。--devさらに検証用のモデルクラスを用意します。今回はLaravelのドキュメントに書いてある内容を使います。異なるEloquentモデルクラスが新旧の書き方をしている新の方は、元々からあるUserクラスを使います。旧の方は、こちらを使います。];});検証はtinkerを使って新旧それぞれのモデルファクトリを実行してみます。パターン1新の方は、こちらを使います。}}旧の方は、さきほどの使った内容を使います。新の方は次のような条件[1]があるため、旧の方のファイル名を別名に変更しています。Factoryであるdatabase/factories/FlightFactory.php↓database/factories/FlightOldFactory.php検証はさきほどと同じでtinkerを使って新旧それぞれのモデルファクトリを実行してみます。パターン2ドキュメントを読むとHasFactoryトレイトのnewFactoryメソッドをオーバーライドして、任意のファクトリクラスのインスタンスを返すように変更すれば、検証2の新のファクトリクラスの命名ルールを適用しないで済みます。この場合、旧ファクトリのファイル名を変更する必要はないです。}あとファクトリクラスの$modelプロパティにEloquentモデルクラスを指定してあげる必要があります。結果3つの検証を試してみましたが、laravel/legacy-factoriesパッケージを使うことで新旧の書き方が共存することは可能のようです。あとから地道に修正することもできそうですが、laravel/legacy-factoriesパッケージがどのバージョンのLaravelまでサポートしてくれるのかわからないので、早めに修正は行った方が良さそうです。↩︎GitHubで編集を提案なお子育てしているエンジニアバッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。