truncate all tables in laravel using eloquent
NOTE:
doctrine/dbal
Package is Required for Performing this Operations
So Make Sure that is Installed composer require doctrine/dbal
1. Get all the table names
$tableNames = Schema::getConnection()->getDoctrineSchemaManager()->listTableNames();
2. Loop through the array of table names and truncate with Schema Builder
foreach ($tableNames as $name) { //if you don't want to truncate migrations if ($name == 'migrations') { continue; } DB::table($name)->truncate();}
Help: If you have Got Some Error Such as
SQLSTATE[42000]: Syntax error or access violation: 1701 Cannot truncate a table referenced in a foreign key constraint
You Can disable foriegn Key Checks
Schema::disableForeignKeyConstraints();
and make sure to ReEnable it
Schema::enableForeignKeyConstraints();
Here is my answer based on @Hao Luo. Moreover, it has these pros:
- You do not need to install any extra package (no need for doctrine)
- It supports Laravel 5 (or newer) very well
- It disables foreign key constraint (If you truncate without caring about the orders and enables foreign key constraint, you will likely get an error)
Here is the code:
DB::statement("SET foreign_key_checks=0");$databaseName = DB::getDatabaseName();$tables = DB::select("SELECT * FROM information_schema.tables WHERE table_schema = '$databaseName'");foreach ($tables as $table) { $name = $table->TABLE_NAME; //if you don't want to truncate migrations if ($name == 'migrations') { continue; } DB::table($name)->truncate();}DB::statement("SET foreign_key_checks=1");
Hope you like it! :)