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)
你不能,但你可以在执行以下步骤后使用你的自定义代码来完成:
- Copy file from Illuminate/Database/Console/Seeds/SeederMakeCommand.php to your
folder.
- Modify getPath() function.
- Bind this class to container to override core.
我正在使用 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)你不能,但你可以在执行以下步骤后使用你的自定义代码来完成:
- Copy file from Illuminate/Database/Console/Seeds/SeederMakeCommand.php to your folder.
- Modify getPath() function.
- Bind this class to container to override core.