> Faqs > Solucionar "Cannot truncate a table referenced in a foreign key constraint" en Laravel Eloquent

Solucionar "Cannot truncate a table referenced in a foreign key constraint" en Laravel Eloquent

Estoy intentando truncar una tabla con Laravel Eloquent:

Customer::truncate();

Pero tengo este error al ejecutar el truncate.

SQLSTATE[42000]: Syntax error or access violation: 1701 Cannot truncate a table referenced in a foreign key constraint

¿Cómo lo puedo solucionar?

Respuestas

Este error te lo da por la integridad referencial, pues no puedes hacer el truncate de una tabla que tiene claves foráneas declaradas.

Lo más fácil que puedes hacer es borrar todos los registros en lugar de hacer el truncate.

Customer::where('id', '>', 0)->delete();

Con esto ya lo tendrías. El único problema es que no se resetea el id del autonumérico. Si eso es un inconveniente que no pueda producirse, entonces tienes que recurrir a otros mecanismos.

Lanzar las sentencias SQL desde el programa de administración de la base de datos

El primero sería simplemente lanzar las sentencias SQL para hacer el truncate desde el sistema gestor de la base de datos, haciendo primero que se evite las comprobaciones de integridad referencial.

Esto lo puedes ver en la FAQ: Cómo truncar una tabla con con foreign key: Error MySQL Cannot truncate

Lanzar las sentencias con Laravel

Puedes hacer esto mismo desde Laravel, con las siguientes sentencias SQL. El único problema aquí es que, al no usar Eloquent, estas sentencias depende del motor de base de datos que estés usando.

DB::statement('SET FOREIGN_KEY_CHECKS = 0;');
DB::table('customers')->truncate();
DB::statement('SET FOREIGN_KEY_CHECKS = 1;');

Este código te funcionará bien con MySQL / MariaDB. Otros gestores de bases de datos posiblemente no funcione, pero no te sabría decir a ciencia cierta.

Miguel Angel
2517 118 169 8