Reputation: 688
I want to truncate my user table befor seed.i do like this :
DatabaseSeeder.php :
<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class DatabaseSeeder extends Seeder
{
public function run()
{
App\User::truncate();
factory(App\User::class,1)->create();
}
}
Then run php artisan db:seed
and have error:
In Connection.php line 664:
SQLSTATE[42000]: Syntax error or access violation: 1701 Cannot truncate a table referenced in a foreign key constra
int (`mr_musicer`.`dislikes`, CONSTRAINT `dislikes_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `mr_musicer`
.`users` (`id`)) (SQL: truncate `users`)
In Connection.php line 458:
SQLSTATE[42000]: Syntax error or access violation: 1701 Cannot truncate a table referenced in a foreign key constra
int (`mr_musicer`.`dislikes`, CONSTRAINT `dislikes_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `mr_musicer`
.`users` (`id`))
I want to now why i can't truncate my user table!
Upvotes: 9
Views: 12986
Reputation: 2480
The simplest way to truncate the data before seeding when you have foreign keys in the table
Just add this single line at the start of your run method.
Schema::disableForeignKeyConstraints();
DB::truncate('posts'); or Post::truncate();
Schema::enableForeignKeyConstraints();
Upvotes: 1
Reputation: 742
Import DB
:
use Illuminate\Support\Facades\DB;
And then use this piece of code to truncate the table:
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
DB::table('posts')->truncate();
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
Upvotes: 3
Reputation: 4992
There is foreign key problem and table is trying to remind it to you. If you want to truncate table anyway.
Schema::disableForeignKeyConstraints();
// ... Some Truncate Query
Schema::enableForeignKeyConstraints();
Don't forget To Use:
use Illuminate\Support\Facades\Schema;
Upvotes: 13
Reputation: 475
You have references to your users on some other table. You should add ->onDelete('cascade')
to the dislikes table column that references user's id or delete all dislikes manually first.
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
Upvotes: 0