A migração e a propagação do Laravel 5.1 não podem truncar uma tabela referenciada em uma restrição de chave estrangeira
Estou tentando executar a migração (veja abaixo) e propagar o banco de dados, mas quando executo
php artisan migrate --seed
Eu recebo este erro:
Migration table created successfully.
Migrated: 2015_06_17_100000_create_users_table
Migrated: 2015_06_17_200000_create_password_resets_table
Migrated: 2015_06_17_300000_create_vehicles_table
[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1701 Cannot truncate a table
referenced in a foreign key constraint (`app`.`vehicles`, CONSTRAINT `vehic
les_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `app`.`users` (`id`
)) (SQL: truncate `users`)
[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1701 Cannot truncate a table
referenced in a foreign key constraint (`app`.`vehicles`, CONSTRAINT `vehic
les_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `app`.`users` (`id`
))
Eu procurei o que esse erro deveria significar e também encontreiexemplos de outras pessoas com o mesmo problema, mesmo relacionadas ao usoMySQL, e suas soluções, mas aplicando:
DB::statement('SET FOREIGN_KEY_CHECKS=0;'); and
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
Dentro de down () parece não funcionar e quando eu corro descrever no MySQL, as tabelas parecem corretas.
As migrações são nomeadas corretamente para garantir que a tabela de usuários seja migrada primeiro e, em seguida, veículos para que a chave estrangeira possa ser aplicada, e as tabelas que estão sendo configuradas corretamente sugerem que as migrações foram executadas, mas ocorre o erro. Larguei e recriei o banco de dados e tentei novamente e é o mesmo resultado. Eu também não entendo por que ele está tentando truncar na primeira migração e semente do banco de dados, eu não pensaria que isso ocorreria quando você tentasse executar o php artisan migrate: refresh --seed.
// 2015_06_17_100000_create_users_table.php
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('username', 60)->unique();
$table->string('email', 200)->unique();
$table->string('password', 255);
$table->string('role')->default('user');
$table->rememberToken();
$table->timestamps();
});
}
}
public function down()
{
Schema::drop('users');
}
// 2015_06_17_300000_create_vehicles_table.php
class CreateVehiclesTable extends Migration
{
public function up()
{
Schema::create('vehicles', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->string('make');
$table->string('model');
$table->string('year');
$table->string('color');
$table->string('plate');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users');
});
}
}
public function down()
{
Schema::drop('vehicles');
}