Невозможно использовать устаревшие фабрики в Laravel 8

#laravel #factory #laravel-8

#laravel #фабрика #laravel-8

Вопрос:

Я обновляю свой проект laravel 7.x до 8.

На данный момент я придерживаюсь устаревших фабрик, поскольку у меня их много, и они используются в тестах и тому подобном, поэтому потребуется вечность, чтобы перейти на новую структуру классов.

Проблема в том, что я, похоже, не могу запускать свои сеялки или тесты локально (у которых есть устаревшие фабрики).

Я импортировал новые laravel/legacy-factories и установил пространства имен в своих сеялках и обновил файл composer.json. Но каждый раз, когда я пытаюсь запустить сеялку или тест, я получаю сообщение об ошибке

 Unable to locate factory for [AppModelsUser] (or any other model)
  

Я удалил classmap из composer.json , как указано в документах, но попробовал его с этим и без него.

Я попытался полностью удалить все кэши и запустить composer install без радости.

У кого-нибудь еще была эта проблема?

ОБНОВЛЕНИЕ — Вот мой файл composer.json. Некоторые строки были удалены.

 {
    "require": {
        "php": ">=7.4",
        "bacon/bacon-qr-code": "^2.0.2",
        "browner12/helpers": "^3.2",
        "dg/mysql-dump": "^1.5",
        "doctrine/dbal": "^2.11",
        "fzaninotto/faker": "~1.9",
        "graham-campbell/github": "^9.4.0",
        "graylog2/gelf-php": "^1.6",
        "guzzlehttp/guzzle": "^6.5.5",
        "jeremykendall/php-domain-parser": "^5.7",
        "laravel/framework": "^8.0",
        "laravel/helpers": "^1.3",
        "laravel/legacy-factories": "^1.0",
        "laravel/scout": "^8.3",
        "laravel/tinker": "^2.4",
        "laravel/ui": "^3.0",
        "league/csv": "^9.6",
        "mandrill/mandrill": "^1.0",
        "mariuzzo/laravel-js-localization": "^1.7",
        "php-http/guzzle6-adapter": "^2.0.1",
        "phpseclib/phpseclib": "^2.0.29",
        "pragmarx/google2fa": "^8.0",
        "predis/predis": "^1.1",
        "segmentio/analytics-php": "^1.5",
        "spatie/fractalistic": "^2.9",
        "zachleigh/laravel-property-bag": "^1.4"
    },
    "require-dev": {
        "laravel/dusk": "^6.8",
        "mockery/mockery": "1.4.2",
        "phpunit/phpunit": "^9.0",
        "filp/whoops": "~2.7"
    },
    "autoload": {
        // also tried with the classmap here
        "psr-4": {
            "Database\Seeders\": "database/seeders/",
            // Also tried with the factories namespace here
        },
        "files": [
            "app/helpers.php"
        ]
    },
    "scripts": {
        "post-root-package-install": [
            "php -r "file_exists('.env') || copy('.env.example', '.env');""
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ],
        "post-install-cmd": [
            "Illuminate\Foundation\ComposerScripts::postInstall",
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "Illuminate\Foundation\ComposerScripts::postUpdate",
            "php artisan optimize"
        ],
        "post-autoload-dump": [
            "Illuminate\Foundation\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover"
        ]
    },
    "config": {
        "preferred-install": "dist",
        "sort-packages": true,
        "optimize-autoloader": true
    },
    "extra": {
        "laravel": {
            "dont-discover": [
                "laravel/dusk"
            ]
        }
    }
}
  

Комментарии:

1. Можете ли вы опубликовать свои composer.json ?

2. @Jerodev добавлен по запросу.

Ответ №1:

В конце концов мне удалось решить эту проблему, просто удалив файлы packages.php и services.php из каталога начальной загрузки, а затем composer dump-autoload выполнив трюк.