在文件夹中调用 Laravel Seeder

Posted

技术标签:

【中文标题】在文件夹中调用 Laravel Seeder【英文标题】:Calling Laravel Seeder inside folder 【发布时间】:2021-03-20 10:34:44 【问题描述】:

我已升级到 Laravel 8,但我在子目录中的自定义播种器无法正常工作。该文件位于database/seeders/tests/TestSeeder.php.

当我运行命令php artisan db:seed --class="TestSeeder" 时,它会返回一条错误消息:

Target class [Database\Seeders\TestSeeder] does not exist.

播种机

<?php

namespace Database\Seeders\Tests;

class TestSeeder extends BaseSeeder

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    
       // codes
    

composer.json

"autoload": 
    "psr-4": 
        "App\\": "app/",
        "Database\\Factories\\": "database/factories/",
        "Database\\Seeders\\": "database/seeders/",
        "Database\\Seeders\\Tests\\": "database/seeders/tests/"
    
,

【问题讨论】:

您将TestSeeder 放入Database\Seeders\Tests 命名空间 还是不行。 试试composer dump-autoload 您的命令中是否需要为 --class='Tests\TestSeeder'? 仍然无法正常工作,顺便说一句,我目前正在将我的 Lumen 5.8 升级到 Lumen 8.x 然后我看到数据库/种子重命名为数据库/种子,这就是我将种子移到数据库/种子文件夹中的原因. 【参考方案1】:

Laravel 假设您正在运行 Database\Seeders\DatabaseSeeder 类的播种机。如果您提供了一个不合格的类名,例如 TestSeeder,它将假定您的意思是 Database\Seeders\TestSeeder 类。

因此,您应该指定完全限定的类名。

php artisan db:seed --class="Database\\Seeders\\Tests\\TestSeeder"

【讨论】:

谢谢@miken32。我的应用程序出了什么问题。当我运行php artisan make:seeder TestSeeder 它在database/seeds 文件夹中创建? 确保您已正确更新 composer.json 中所有软件包的版本,包括 "laravel/framework": "^8.12" 谢谢 bru,我只需要删除 /database/seeds 文件夹。一切都很好,:)

以上是关于在文件夹中调用 Laravel Seeder的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.* 执行seeder命令出现错误的解决方法

如何将 Laravel 数据表里的数据导出成 Seeder 文件

Laravel5.1 填充数据库

Laravel DB Seeder 不会在控制台中播种

laravel seeder factory填充数据

laravel artisan 常用命令