【问题标题】:Target class [DatabaseSeeder] does not exist [duplicate]目标类 [D​​atabaseSeeder] 不存在 [重复]
【发布时间】:2021-04-02 10:50:51
【问题描述】:

当我运行php artisan migrate:fresh --seed 我得到了错误:

目标类 [D​​atabaseSeeder] 不存在。

我做了此链接中指出的建议,但与in laravel 8 with seeding , i has this issue Target class [TableSeeder] does not exist没有产生相同的问题

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "php": "^7.2.5",
        "fideloper/proxy": "^4.2",
        "fruitcake/laravel-cors": "^1.0",
        "guzzlehttp/guzzle": "^7.0.1",
        "laravel/framework": "^8.0",
        "laravel/tinker": "^2.0",
        "laravel/ui": "^3.0"
    },
    "require-dev": {
        "facade/ignition": "^2.3.6",
        "fzaninotto/faker": "^1.9.1",
        "mockery/mockery": "^1.3.1",
        "nunomaduro/collision": "^5.0",
        "phpunit/phpunit": "^9.0"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeders",
            "database/factories"
        ],
        "files": [
            "app/helpers.php"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    }
}

这是我在 /database/seeders/ 中的数据库播种器

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UsersSeeder::class);
        $this->call(InstallationSeeder::class);
        $this->call(MaintenanceReasonSeeder::class);
        $this->call(CompanytypesSeeder::class);
        $this->call(LocationTypeSeeder::class);
        $this->call(formTypeseeder::class);
    }
}

【问题讨论】:

    标签: php laravel laravel-8 laravel-seeding


    【解决方案1】:

    您需要从classmap 中删除条目,并在psr4 下指定Database 命名空间的映射

    {
        "autoload": {
            "psr-4": {
                "App\\": "app/",
                "Database\\Factories\\": "database/factories/",
                "Database\\Seeders\\": "database/seeders/"
            },
            "files": [
                "app/helpers.php"
            ]
        },
    }
    

    然后运行composer dump-autoload

    【讨论】:

    • 设置"Database\\": "database/"就够了。
    • @Tpojka 哈哈..你是对的 - 将 classmap 条目移动到 psr4 时完全错过了 - 只是移动了两个条目并更新了 - 愚蠢的我。感谢指出会更新答案
    • 虽然还是按照自己的方式做比较好,呵呵。原因有两个:工厂和播种机目录是小写的,不遵循 PSR 语法,加上迁移目录包含的类不是文件名 类名等价物。
    • 嗯...这就是为什么标准 Laravel 8 在 psr4 下有两个不同的条目映射命名空间,用于工厂和播种机。让我再更新一次。
    猜你喜欢
    • 1970-01-01
    • 2020-10-29
    • 2023-04-02
    • 2021-02-26
    • 2021-04-20
    • 2021-01-06
    • 2021-01-26
    • 2021-03-06
    • 2021-08-30
    相关资源
    最近更新 更多