Laravel 5.5:使用seeder清理/删除数据库数据(不是模式!)并重置自动增量

Laravel 5.5:使用seeder清理/删除数据库数据(不是模式!)并重置自动增量,laravel,phpunit,auto-increment,truncate,laravel-seeding,Laravel,Phpunit,Auto Increment,Truncate,Laravel Seeding,我使用laravel创建PHPunit测试。对于每个测试,我需要“重置”DB,但是删除所有表和设置模式的速度非常慢(在mysql上)——所以我不想更改模式,只想删除数据并重置每个表的自动增量计数器 我如何使用seeder实现它?因为我无法在网络上轻松找到解决方案-所以在我的研究之后,我创建了seeder,将它留给后代;) 使用illumb\Database\elount\Model; 使用照明\数据库\播种机; 使用Illumb\Support\Facades\DB; 类种子机扩展了种子机 {

我使用laravel创建PHPunit测试。对于每个测试,我需要“重置”DB,但是删除所有表和设置模式的速度非常慢(在mysql上)——所以我不想更改模式,只想删除数据并重置每个表的自动增量计数器


我如何使用seeder实现它?

因为我无法在网络上轻松找到解决方案-所以在我的研究之后,我创建了seeder,将它留给后代;)

使用illumb\Database\elount\Model;
使用照明\数据库\播种机;
使用Illumb\Support\Facades\DB;
类种子机扩展了种子机
{
公共功能运行()
{
$rows=DB::select('SHOW TABLES');
$tables=array_column($rows,'tables_in_u'.env('DB_DATABASE'));
$this->clean($tables);
}
私人功能清洁($tables)
{
模型::unguard();
foreach($tables作为$table){
DB::table($table)->delete();
语句('ALTER TABLE'.$TABLE.'AUTO_INCREMENT=0;');
}
}
}
结果 我的数据库中有22个表(每个表平均10列),5个表中只有很少的种子机数据。对于调用
Artisan::call(…)
内部测试,计时如下:

  • 17.83[s]
    for
    php artisan迁移:新鲜——种子
  • 5.56[s]
    用于
    php artisan db:seed
    (使用上述seder)
正如我们所看到的,seeder比从零开始设置模式快3倍多——这给编写自动测试的开发人员带来了动力:)