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

时间:2018-01-22 22:10:18

标签: laravel phpunit auto-increment truncate laravel-seeding

我使用laravel创建PHPunit测试。对于每个测试,我需要“重置”DB但是丢弃所有表并设置模式非常慢(在mysql上) - 所以我不想更改模式但只删除DATA并重置每个表的AUTO-INCREMENT计数器。

我如何使用播种机做到这一点?

1 个答案:

答案 0 :(得分:4)

因为我无法轻易在网上找到解决方案 - 所以在我研究之后我创建了播种机,留给后代留下来;)

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class CleanTablesSeeder extends Seeder
{
    public function run()
    {
        $rows = DB::select('SHOW TABLES');
        $tables = array_column($rows, 'Tables_in_'.env('DB_DATABASE'));

        $this->clean($tables);
    }

    private function clean($tables)
    {
        Model::unguard();
        foreach ($tables as $table) {
            DB::table($table)->delete();
            DB::statement('ALTER TABLE '.$table.' AUTO_INCREMENT = 0;');
        }
    }
}

结果

我的数据库中有22个表(每个表平均有10个列),5个表中只有少数的播种机数据。为了在测试中调用Artisan::call(...),时间如下:

    {li> 17.83[s] php artisan migrate:fresh --seed {li> 5.56[s] php artisan db:seed(使用上面的seder)

正如我们所看到的,播种器从头开始比设置架构快3倍以上 - 这促进了编写自动测试的开发人员:)

相关问题