而是可以将所有新的播种器文件手动一个接一个地手动添加到DatabaseSeeder.php文件中,是否可以自动运行种子目录中的所有文件。那可能吗?
PS:当然,在这种情况下(如@DissidentRage所述),我们应该 考虑使这样的过程自动化可以使您的播种机独立,也可能造成很多麻烦。
我遇到了这个问题,并以此方式找到了一个简单的答案。
您可以轻松地使用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()方法。和..文件夹。
| 归档时间: |
|
| 查看次数: |
1876 次 |
| 最近记录: |