如何在laravel中自动运行数据库/种子文件夹中的所有种子?

Ske*_*tor 0 laravel

而是可以将所有新的播种器文件手动一个接一个地手动添加到DatabaseSeeder.php文件中,是否可以自动运行种子目录中的所有文件。那可能吗?

PS:当然,在这种情况下(如@DissidentRage所述),我们应该 考虑使这样的过程自动化可以使您的播种机独立,也可能造成很多麻烦。

Ske*_*tor 5

我遇到了这个问题,并以此方式找到了一个简单的答案。

您可以轻松地使用scandir()将所有文件名放入数组,然后仅使用foreach循环遍历它们。然后自动调用/运行它们。这样,您无需在run()每次创建(通常使用php artisan make:seeder SomeTableSeeder)播种器时将新类添加到方法中。

所以与其:

// database/seeds/DatabaseSeeder.php
class DatabaseSeeder extends Seeder
{

    public function run() {
        $this->call(UsersTableSeeder::class);
        $this->call(AnotherTableSeeder::class);
        ...
    }

}
Run Code Online (Sandbox Code Playgroud)

只需使用:

// database/seeds/DatabaseSeeder.php
class DatabaseSeeder extends Seeder
{

    public function run(){
        $files_arr = scandir( dirname(__FILE__) ); //store filenames into $files_array
        foreach ($files as $key => $file){
            if ($file !== 'DatabaseSeeder.php' && $file[0] !== "." ){
                $this->call( explode('.', $file)[0] );
            }
        }
    }

} 
Run Code Online (Sandbox Code Playgroud)

PS:如果要从此自动运行过程中排除种子文件,只需在文件名的开头添加一个点。

PS2:如果您出于任何原因要更改排除字符。只需在if表达式前添加所需的排除字符(例如下划线字符prepend && $file[0] !== "_")。不要更改$file[0] !== "."表达式,因为它扩展了scandir()方法。和..文件夹。