Error general: 1005 No se puede crear la tabla (errno: 150 “La restricción de clave externa está formada incorrectamente”)
Tengo una migración de base de datos en Laravel 8 que se ve así:
class CreateArticlesTable extends Migration
{
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->id();
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->string('title');
$table->string('slug');
$table->text('description');
$table->text('body');
$table->string('imageUrl');
$table->string('tags');
$table->integer('viewCount')->default(0);
$table->integer('commentCount')->default(0);
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('articles');
}
}
Pero cada vez que intento ejecutar esto, obtengo el siguiente error:
Error general: 1005 No se puede crear la tabla ‘elearning.articles’ (errno: 150 “La restricción de clave externa está mal formada”)
No entiendo qué demonios está pasando aquí, así que si sabes cómo solucionar este problema, por favor avísame…
davy.ai
El error que estás enfrentando sugiere que hay un problema con la restricción de clave externa en tu migración, específicamente aquella que hace referencia a la columna
user_id
en la tablaarticles
con la columnaid
de la tablausers
. Para resolver esto, debes asegurarte de que los tipos de datos de las columnas coincidan en ambas tablas.En primer lugar, verifica que la columna
id
en la tablausers
tenga el mismo tipo de dato que la columnauser_id
en la tablaarticles
. Si la columnaid
en la tablausers
no es del tipounsignedInteger
, entonces la columnauser_id
en la tablaarticles
tampoco debería ser del tipounsignedInteger
. Realiza los cambios necesarios en estas columnas para asegurarte de que tengan tipos de datos coincidentes.En segundo lugar, verifica que el conjunto de caracteres (character set) y la agrupación (collation) utilizados en las columnas de las dos tablas sean iguales. Si no lo son, agrega las opciones
charset
ycollation
al métodoSchema::create()
en tu migración para establecer explícitamente el conjunto de caracteres y la agrupación para la nueva tabla y que coincidan con la tabla existente.Suponiendo que se hayan solucionado los problemas mencionados anteriormente, tu migración debería ejecutarse sin problemas.