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

时间:2018-01-12 19:14:30

标签: php laravel artisan

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

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

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

但似乎播种类无法做到这一点:

php artisan make:seeder UsersTableSeeder --path=Modules/User/Database/
  

“ - path”选项不存在。

或传递完整的相对路径:

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

./ 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):无法打开str     eam:没有这样的文件或目录

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

3 个答案:

答案 0 :(得分:1)

你做不到。 GeneratorCommand(Seeder扩展)并不关心文件夹是否存在,因为它只是编写文件。

/**
 * 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以查看它是如何完成的,这并不是很困难。

答案 1 :(得分:0)

在我们的团队中,我遇到了同样的问题bcs,我们想创建两个文件夹,一个用于真实数据播种者,另一个用于伪造数据播种者。
在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)

答案 2 :(得分:0)

您不能执行以下操作,但是可以使用自定义代码来完成此操作:

  
      
  1. 将文件从Illuminate / Database / Console / Seeds / SeederMakeCommand.php复制到您的   文件夹。
  2.   
  3. 修改getPath()函数。
  4.   
  5. 将此类绑定到容器以覆盖核心。
  6.