💨

【Laravel】Laravel8でModelFactoryのnamespaceを変更する

2022/06/20に公開

EloquentModelnamespaceを独自(App\Models以外)にした時に、ModelFactoryのnamespaceもEloquentModelnamespaceに合わせた構造になっちゃうのでカスタマイズ。

そもそも、EloquentModelModelFactorynamespace構造は合わせたほうがいいのかしら。

やり方

Illuminate\Database\Eloquent\Factories\HasFactoryTraitには拡張ポイントとして

  • protected static function newFactory()
    があったので、そこでEloquentModelごとに利用するModelFactoryreturnしてあげる。
class Task extends Model
{
    use HasFactory;

    // HasFactoryのnewFactory()をオーバーライド
    protected static function newFactory()
    {
        return app()->make(TasksFactory::class);
    }
}

改善ポイント

  • そもそもEloquentModelModelFactorynamespace構造は揃えたほうがいいの?
  • ModelFactorynamespaceがルール化出来ているのであれば別の定義方法があるのでは?
    • EloquentModelごとに定義するのが冗長

Discussion