Sto cercando di eseguire la migrazione (vedi sotto) e seminare il database, ma quando corrolaravel 5.1 Migrazione e semina non può troncare una tabella di riferimento in un vincolo di chiave esterna
php artisan migrate --seed
ottengo questo errore :
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`
))
ho guardato quello che si suppone questo errore significare, e anche trovato examples di altre persone in esecuzione nello stesso problema, anche solo legati all'utilizzo MySQL, e le loro soluzioni, ma si applicano:
DB::statement('SET FOREIGN_KEY_CHECKS=0;'); and
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
All'interno di down() non sembra funzionare e quando corro descrivo in MySQL le tabelle sembrano corrette.
Le migrazioni vengono denominate correttamente per assicurarsi che la tabella degli utenti venga migrata per prime, quindi i veicoli in modo che la chiave esterna possa essere applicata e le tabelle che vengono configurate correttamente suggeriscono che le migrazioni sono state eseguite, ma poi si verifica l'errore. Ho abbandonato e ricreato il DB e l'ho provato di nuovo ed è lo stesso risultato. Inoltre, non capisco perché stia tentando di troncare la prima migrazione e il seed del database, non avrei pensato che si sarebbe verificato quando si è tentato di eseguire la migrazione di php artisan: 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');
}
Si sta tentando di avviare il database sulla prima migrazione perché si passa l'opzione '--seed'.Le tue migrazioni vanno bene, è il seeding che è il problema. Puoi aggiungere il codice per la seminatrice da tavolo dei veicoli? – user3158900
Si potrebbe anche voler provare 'delete()' piuttosto che 'truncate()'. Questo dovrebbe funzionare – user3158900
Ciao @ utente3158900, l'ho trovato in DatabaseSeeder. Ho aggiunto aggiunto delete() e funziona. Se pubblichi una risposta, la contrassegnerò come corretta. – mtpultz