微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在Laravel 8中使用旧式工厂

如何解决无法在Laravel 8中使用旧式工厂

我正在将laravel 7.x项目升级到8。

我现在仍在使用遗留工厂,因为我有许多遗留工厂,并将它们用于测试和其他事情中,因此要永久地换成新的类结构,就需要花费时间。

问题是我似乎无法在本地运行有种子工厂的种子或测试。

我已经导入了新的laravel/legacy-factories,并在播种器上设置了名称空间,并更新了composer.json文件。但是每次我尝试运行播种机或测试时,我都会得到一个错误

Unable to locate factory for [App\Models\User] (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","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"
            ]
        }
    }
}

解决方法

我最终通过简单地从引导目录中删除packages.phpservices.php文件来解决此问题,然后composer dump-autoload做到了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。