es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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…

Tags:  , , , ,

Answer

  1. Avatar for 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 tabla articles con la columna id de la tabla users. 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 tabla users tenga el mismo tipo de dato que la columna user_id en la tabla articles. Si la columna id en la tabla users no es del tipo unsignedInteger, entonces la columna user_id en la tabla articles tampoco debería ser del tipo unsignedInteger. 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 y collation al método Schema::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.

Comments are closed.