Migraciones de Laravel: clase “no encontrada”

5 minutos de lectura

avatar de usuario
Lavadero

Estoy implementando un proyecto barebone de Laravel en Microsoft Azure, pero cada vez que intento ejecutar php artisan migrate me sale el error:

[2015-06-13 14:34:05] production.ERROR: excepción ‘Symfony\Component\Debug\Exception\FatalErrorException’ con el mensaje ‘Clase ” no encontrada’ en D:\home\site\vendor\laravel\framework\src\Illuminate\Database\Migrations\Migrator.php :328

Seguimiento de la pila:

 #0 {main}  

¿Cual podría ser el problema? Muchísimas gracias

— editar —

Clase de migración

<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function(Blueprint $table)
        {
            $table->bigIncrements('id');
            $table->string('name', 50);
            $table->string('surname', 50);
            $table->bigInteger('telephone');
            $table->string('email', 50)->unique();
            $table->string('username', 50)->unique();
            $table->string('password', 50);
            $table->boolean('active')->default(FALSE);
            $table->string('email_confirmation_code', 6);
            $table->enum('notify', ['y', 'n'])->default('y');
            $table->rememberToken();
            $table->timestamps();
            
            $table->index('username');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users');
    }
}

  • ¿Podría publicar su código de migración?

    – Joel Hinz

    13 de junio de 2015 a las 15:51

  • Solo asegúrese de seguir la solución aquí stackoverflow.com/questions/24413929/…

    – xazistnr

    8 de febrero de 2016 a las 8:54

avatar de usuario
Umair Ahmed

Para usuarios del cargador automático PSR-4 (composer.json):

Mantenga la carpeta de migraciones dentro classmap array y no lo incluya dentro del objeto psr-4 bajo autoload cabeza. Como la clase principal de las migraciones, Migrator, no admite el espacio de nombres. Por ejemplo;

"autoload": {
    "classmap": [
        "app/database/migrations"
    ],
    "psr-4": {
        "Acme\\controllers\\": "app/controllers"
    }
}

Entonces corre:

php artisan clear-compiled 
php artisan optimize:clear
composer dump-autoload
php artisan optimize
  • El primero borra todos los archivos de carga automática compilados.
  • Segundo borra los cachés de Laravel (opcional)
  • Third construye el cargador automático para clases con espacio de nombres.
  • Cuarto optimiza varias partes de su aplicación Laravel y crea el cargador automático para clases sin espacio de nombres.

A partir de este momento, no tendrás que volver a hacer esto y cualquier nueva migración funcionará correctamente.

  • Esto funciona perfectamente. Pero, ¿podría explicar por qué es necesario?

    – Félix Eva

    22 de junio de 2017 a las 23:51

  • @FelixEve bien porque las migraciones no tienen espacios de nombres, por lo que intentar cargarlos automáticamente a través de mecanismos de espacio de nombres (psr-4, etc.) no tiene sentido. La categoría classmap en composer.json es para tales clases. Los siguientes comandos simplemente regeneran todas las asignaciones de carga automática de acuerdo con la nueva configuración.

    – Umair Ahmed

    23 de junio de 2017 a las 2:08


  • Después del primer comando que ejecuté, cada vez que intento ejecutar mi proyecto, aparece este error Erroneous data format for unserializing 'Symfony\Component\Routing\CompiledRoute' como lo arreglo??

    – Abdalá

    21 de abril de 2020 a las 13:14


  • Lo arreglé !! ¡¡Gracias!! para preocupaciones posteriores! si al ejecutar el primer comando, obtiene el error Erroneous data format for unserializing 'Symfony\Component\Routing\CompiledRoute' esto se puede arreglar con los siguientes pasos: 1. !!! elimine el archivo /bootstrap/cache/routes.php 2. composer require symfony/routing:v4.2.0 3. ruta artesanal de php: el paso de caché podría no completarse correctamente ya que el proyecto podría estar usando otra versión de la ruta de Symfony, pero de todos modos funcionará

    – Abdalá

    21 de abril de 2020 a las 13:28


avatar de usuario
mo kawsara

Simplemente asegúrese de que su nombre de archivo de migración sea el mismo que el nombre de su clase.

es decir:

Si el nombre del archivo es:

xxx_151955_create_post_translations_table.php

Entonces la clase debería ser:

CreatePostTranslationsTable


Si está utilizando Laravel 9, no hay necesidad de tal problema ya que la clase de migración se representa así:

return new class extends Migration

  • ¿No debería ser xxx_151955_create_posts_translations_table.php?

    – Chris

    7 de mayo de 2018 a las 0:59

  • @CHammond tienes toda la razón, edité mi respuesta =)

    – Mo Kawsara

    7 mayo 2018 a las 12:54

  • No puedo creer que perdí tanto tiempo en esto… Olvidé que lo renombré.

    – Daniel

    28 de julio de 2020 a las 18:05

  • y recuerda que xxx es una fecha con guión bajo (_), utilicé erróneamente guiones (-) y no podía averiguar qué estaba mal…

    – boryn

    22 de septiembre de 2020 a las 14:01

Si obtiene el “Error de clase no encontrada” al ejecutar migraciones, intente ejecutar este comando.

composer dump-autoload 

luego vuelva a emitir el comando de migración. Ver más detalles en el sitio oficial (#Migraciones en ejecución): http://laravel.com/docs/master/migrations#running-migrations

  • Nada funciona. Me sigue dando el error de no encontrado. Comenté los archivos de migración predeterminados (usuarios y restablecimientos de contraseña) para que no me diera un "SQLSTATE[42000]: Syntax error specified key was too long; max key length is 767 bytes (SQL error)" (ambas cosas [Illuminate\Database\QueryException] y [PDOExeption]. ¡Estos archivos son predeterminados! ¿Por qué no puedo usar correctamente estos comandos… también migrar: restablecer y: revertir dame Nothing to rollback. ¿Puede usted ayudar?

    – Derk Jan Speelman

    21 de abril de 2017 a las 17:19

Tuve este mismo problema hace un tiempo. Aparentemente es un problema común porque en la documentación de Laravel, incluso lo sugiere: http://laravel.com/docs/master/migrations#running-migrations

Básicamente, todo lo que tiene que hacer es actualizar algunos archivos del compositor. Simplemente ejecuta:

composer dump-autoload

¡Esto actualizará los archivos de carga automática del compositor y luego podrá ejecutar su migración normal y debería funcionar! El mejor.

Creo que es tarde para responder a esta pregunta, pero tal vez esto ayude a alguien.

Si cambió el nombre del archivo de migración, asegúrese de su nombre de clase interno.

Por ejemplo, si cambio el nombre de una migración de 2018_06_10_079999_create_admins_table.php a 2018_06_10_079999_create_managers_table.php por lo que su nombre de clase interna debe cambiar de CreateAdminsTable a CreateManagerTable también.

avatar de usuario
Al Masum Fahim

también corro en el mismo problema.

La solución para mí fue eliminar el archivo de migración Y eliminar el registro de la tabla de “migraciones” en la base de datos.

Después de eso, corrí

Composer volcado-carga automática

y finalmente pude restablecer/revertir las migraciones.

avatar de usuario
m2j

Eliminé uno de los archivos de migración. enfrentó el mismo problema, mientras que php artisan migrate:rollback

Entonces lo intenté composer dump-autoload. De nuevo apareció lo mismo.

Restauré el archivo eliminado e intenté composer dump-autoload y php artisan migrate:rollback. Funciona.

  • me alegro de haber ayudado mi amigo

    – m2j

    30 de junio de 2016 a las 7:28

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad