No se puede truncar las tablas al realizar una siembra en Laravel 7.
Me enfrento a un problema con Laravel 7 al truncar una tabla, incluso cuando he utilizado FOREIGN KEY CHECKS enable y disable, todavía devuelve este tipo de error “Error de sintaxis o violación de acceso: 1701 No se puede truncar una tabla referenciada en una restricción de clave externa.”.
Método
DB::statement("SET FOREIGN_KEY_CHECKS=0;);
Artisan::call('db:seed', ["--database" => 'DBNAME', '--force' => true, "--class" => 'StatusTableSeeder']);
DB::statement("SET FOREIGN_KEY_CHECKS=1;");
Archivo Seeder StatusTableSeeder.php
public function run()
{
\DB::table('statuses')->truncate();
\DB::table('statuses')->insert(array (
0 =>
array (
'id' => 1,
'name' => 'Current',
'type' => 'current',
),
1 =>
array (
'id' => 2,
'name' => 'Resolved',
'type' => 'resolved',
),
));
}
He actualizado la versión de Laravel de 6 a 7 y esta sintaxis funciona bien en Laravel 6, pero cuando lo actualizo a Laravel 7, deja de funcionar. Si alguien tiene idea de cuál es el problema real.
davy.ai
La incidencia que estás enfrentando con Laravel 7 al truncar una tabla se debe a las restricciones de clave externa presentes en la base de datos. Aunque has utilizado
FOREIGN_KEY_CHECKS
para habilitar y deshabilitar las comprobaciones de clave externa, sigue devolviendo el mensaje de error “Error de sintaxis o violación del acceso: 1701 No se puede truncar una tabla referenciada en una restricción de clave externa”.Una posible solución a este problema es deshabilitar las restricciones de clave externa antes de truncar la tabla y luego volver a habilitarlas una vez completada la truncación.
En tu fragmento de código, ya estás deshabilitando las comprobaciones de clave externa utilizando el método
DB::statement("SET FOREIGN_KEY_CHECKS=0;");
. Sin embargo, el problema aún puede ocurrir debido a las restricciones de clave externa presentes en tu base de datos.Para resolver este problema, puedes modificar tu archivo sembrador
StatusTableSeeder.php
de la siguiente manera:En este código modificado, las comprobaciones de clave externa se desactivan utilizando el método
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
antes de truncar la tabla. Después de la truncación e inserción, las comprobaciones de clave externa se habilitan nuevamente utilizandoDB::statement('SET FOREIGN_KEY_CHECKS=1;');
.Esta solución debería resolver el problema de truncar tablas con restricciones de clave externa en Laravel 7.