Laravel 5.1 Migration and Seeding Cannot truncate a table referenced in a foreign key constraint
我正在尝试运行迁移(见下文)并为数据库播种,但是当我运行时
1 | php artisan migrate --seed |
我收到此错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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` )) |
我查看了这个错误应该是什么意思,并且还找到了遇到同样问题的其他人的例子,甚至只是与使用MySQL及其解决方案有关,但是应用:
1 2 |
在down()中似乎不起作用,当我在MySQL中运行describe时,表格看起来是正确的。
正确命名迁移以确保首先迁移users表,然后确定可以应用外键的车辆,并且正确设置的表表明迁移已运行,但随后发生错误。 我删除并重新创建了数据库并再次尝试,结果相同。 我也不明白为什么它试图截断数据库的第一个迁移和种子,我不会想到当你试图运行php artisan migrate:refresh --seed时会发生这种情况。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | // 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'); } |
1 2 3 |
它的工作原理!
如错误所示,您不能截断外键引用的表。 删除应该工作...
使用
1 |
使用默认用户模型的示例
您可以使用
要清空表,这不会删除表结构。 但是自动增量ID不会从初始数字开始。
这对我来说每次都有用。
添加外键时,请务必添加
语法是这样的
1 |
确保将
现在在运行种子之前添加此代替
1 | DB::statement('DELETE FROM table_name'); |
它将删除所有数据。
希望这可以帮助。