laravel перенос фабрик в подмодуль

Как перенести фабрики из database\factories в submodule\factories, чтобы laravel их видел? Пробовал просто перетащить папку и в composer изменить

"classmap": [
      "database/seeds",
      "database/factories"
    ]

на

"classmap": [
      "database/seeds",
      "submodule/factories"
    ]

но фреймворк их не видит. Делал composer dump-autoload -o Пробовал прописать в сервис провайдере Как правильно выполнить перенос?


Ответы (1 шт):

Автор решения: Jigius

Путь до папки `APP_ROOT/database/ влияет не только на поиск фабрик, но и на сидеры и миграции.

Путь до папки задан в коде класса Illuminate\Foundation\Application и через конфигурационные файлы его не переопределить на другое значение.

Но это можно сделать через реализацию своего сервис-провайдера, например так:

  1. В папку APP_ROOT/app/Providers/ положите файл DbPathServiceProvider.php:
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class DbPathServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
        app()->useDatabasePath("submodule");
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //

    }
}
  1. Подключите созданный сервис-провайдер в файле APP_ROOT/config/app.php:
...
'providers' => [
    ....
    App\Providers\DbPathServiceProvider::class
],
...
→ Ссылка