Laravel: 如何在自定义目录中生成播种机

Laravel: How to generate seeders in a custom directory

我正在使用 Laravel 5.5 和 laravel-modules v2。

在自定义目录(特别是在模块内部)中生成 迁移 很容易:

php artisan make:migration create_users_table --path=Modules/User/Database/Migrations

但似乎 seeding 类:

不可能做到这一点
php artisan make:seeder UsersTableSeeder --path=Modules/User/Database/

The "--path" option does not exist.

或传递完整的相对路径:

php artisan make:seeder Modules/User/Database/Migrations/UsersTableSeeder

Creates this exactly folder structure inside ./database/seeds/

或传递完整的绝对路径:

php artisan make:seeder /Modules/User/Database/Migrations/UsersTableSeeder

file_put_contents(\my\file\system\project\database/seeds/C:/Program Files/Git /Modules/User/Database/Seeders/UsersTableSeeder.php): failed to open str eam: No such file or directory

如何在自定义目录中使用 artisan 命令生成播种器?

你不能。 GeneratorCommand(播种器扩展的)不关心文件夹是否存在,因为它只会写入文件。

/**
 * Get the destination class path.
 *
 * @param  string  $name
 * @return string
 */
protected function getPath($name)
{
    return $this->laravel->databasePath().'/seeds/'.$name.'.php';
}

实现您想要的唯一方法是编写您自己的 Seeder 命令并允许目录遍历。你可以查看Illuminate\Database\Console\Migrations\MigrateMakeCommand看看它是怎么做的,不是很难。

我在我们的团队中遇到了同样的问题,我们想创建两个文件夹,一个用于真实数据播种器,另一个用于假数据播种器。
在 DatabaseSeeder 文件中,您可以从另一个路径(名称空间)定义 类,它将在 运行 php artisan db:seed 命令后工作
在我的例子中,我定义了新调用:

            $this->call([
                //real data classes from \database\seeds path
            ]);

            $this->call([
                //fake data from database\seeds\tests path
                'Database\Seeds\Tests\AuthControllerTestSeeder'
            ]);

不要忘记在

中定义您的命名空间 (Database\Seeds\Tests\AuthControllerTestSeeder)

你不能,但你可以在执行以下步骤后使用你的自定义代码来完成:

  1. Copy file from Illuminate/Database/Console/Seeds/SeederMakeCommand.php to your folder.
  2. Modify getPath() function.
  3. Bind this class to container to override core.