Cuando se empieza a trabajar con modelos tengo el siguiente error

Clase de Post no encontrado».

Todo lo que hice:

– Se creó un Modelo con el comando php artisan make:model

– Trató de conseguir que todas las entradas de la tabla de posts con echo Post::all()

He utilizado el siguiente código:

router.php

Route::get('/posts', function(){
    $results = Post::all();
    return $results;
});

Post.php

<?php 
namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model {
    protected $table = 'posts';    
}

Lo he intentado

– Cambiar El Nombre De La Clase

– Dump-autoload (Laravel 4 modelos de clase no encontrada)

InformationsquelleAutor Sylnois | 2015-02-05

7 Comentarios

  1. 74

    Laravel 5 promueve el uso de los espacios de nombres para cosas como los Modelos y Controladores. Su Modelo está bajo la App espacio de nombres, por lo que el código necesita llamar así:

    Route::get('/posts', function(){
    
            $results = \App\Post::all();
            return $results;
    });

    Como se ha mencionado en los comentarios también se pueden use o importar un espacio de nombres en un archivo de modo que usted no necesita citar la ruta de acceso completa, como este:

    use App\Post;
    
    Route::get('/posts', function(){
    
            $results = Post::all();
            return $results;
    });

    Mientras yo estoy haciendo una breve explicación sobre los espacios de nombres que bien podría mencionar la capacidad de alias de una clase así. Hacer esto significa que básicamente puedes cambiar el nombre de su clase sólo en el ámbito de un archivo como este:

    use App\Post as PostModel;
    
    Route::get('/posts', function(){
    
            $results = PostModel::all();
            return $results;
    });

    Más información sobre la importación y aliasing espacios de nombres aquí: http://php.net/manual/en/language.namespaces.importing.php

    • Ouh wow, funcionó. Muchas gracias. Otra pregunta: quiero crear 5 Modelos. Usuario, Post, UserSettings, PostVote, PostComment. Debo poner a todos en virtud de la Aplicación del espacio de nombres?
    • Seguro! De hecho, usted puede ponerlos en cualquier espacio de nombres que tenga sentido para usted – no hay muchos límites. Es importante que todos los modelos son en el mismo espacio de nombres, aunque. (En realidad no TIENE que ser, pero se hace más fácil si usted está recién empezando con ellos)
    • Y no hay la posibilidad de usar cortocircuito Post::all(); en lugar de \App\Post::all() todo el tiempo?
    • Seguro, de dos maneras. Usted puede quitar la namespace App; poco de su modelo de lo que trayendo de vuelta en un ámbito global, lo cual está bien, pero los espacios de nombres son muy útiles en el desarrollo moderno y vale la pena usarlos. La otra forma es use (importar) un espacio de nombres en el archivo de modo que usted no tiene que usar la ruta completa de cada época, como el use Illuminate\Database\Eloquent\Model; de llamada en tu modelo, por ejemplo. Voy a actualizar mi respuesta para incluir que como una opción.
    • Pues bien, ya me dio la respuesta que necesitaba. Voy a tratar de aprender cómo utilizar espacios de nombres. 🙂
    • Buena suerte amigo!

  2. 57

    Estaba teniendo la misma «Clase de [nombre de la clase] no encontrado» mensaje de error, pero no era un problema de espacio de nombres. Todos mis espacios de nombres se han configurado correctamente. Incluso traté de composer dump-autoload y no me ayudan.

    Sorprendentemente (para mí) entonces hice composer dump-autoload -o que según el Compositor de la ayuda, «optimiza PSR0 y PSR4 paquetes para ser cargados con classmaps demasiado, bueno para la producción». De alguna manera, haciendo de esa manera consiguió compositor, de comportarse y de incluir la clase correctamente en el autoload_classmap.php archivo.

    • Bien que funcionó. Deseo morse sentido de por qué.
    • Sí, a mí también. Alguien tiene alguna visión?
    • Protector de la vida! Este helpt me pasó mi tiempo esta tarde productiva en lugar de buscar Stackoverflow durante horas y horas.
    • Yeaah. Esto me salva. Puede alguien decir lo que se esta haciendo?
    • Mismo aquí. Total de momento WTF.
    • Eres tan inteligente bruuh. Trabajó para mí también.
    • Creo que es probablemente debido a Laravel es la lectura de ../cache/compiled.php por defecto, que no se actualiza por composer dump-autoload. Creo que composer dump-autoload sólo actualiza el ../vendor/autoload.php
    • wroked para mí, aunque no estoy seguro de por qué, por lo general, usted no necesita correr autoload cuando la adición de los modelos.
    • usted salvó mi día!

  3. 5

    Yo tenía el mismo error en Laravel 5.2, resulta el espacio de nombres es incorrecto en el modelo de definición de la clase.

    He creado mi modelo usando el comando:

    php artisan make:model myModel

    Por defecto, Laravel 5 se crea el modelo de bajo App carpeta, pero si se va a mover el modelo a otra carpeta como yo lo hice, debe cambiar el espacio de nombres dentro de la definición del modelo demasiado:

    namespace App\ModelFolder;

    Para incluir el nombre de la carpeta a la hora de crear el modelo que puede utilizar (no olvides usar el doble de barras diagonales inversas):

    php artisan make:model ModelFolder\myModel
  4. 1

    Si después de cambiar el espacio de nombres y el config/auth.php aun así no funciona, usted podría tratar el siguiente:

    1. En el archivo vendor/composer/autoload_classmap.php
      cambie la línea
      App\\User' => $baseDir . '/app/User.php',,
      a
      App\\Models\\User' => $baseDir . '/app/Models/User.php',

    2. Al principio del archivo app/Services/Registrar.php cambio «uso de la Aplicación\Usuario» a «App\Modelos\Usuario»

    • Este es un muy específicos de respuesta (sólo funciona para el usuario predeterminado, no clases generales). Además el cambio de proveedor de los archivos es realmente una mala idea, puesto que los cambios se rompa a la hora de actualizar el marco.
  5. 1

    En su router.php archivo, usted debe utilizar el modelo de clase como esta

     use App\Post;

    y el uso de la clase del modelo como este.

    Route::get('/posts', function() {
    
            $results = Post::all();
            return $results; });
  6. 0

    Como @granel, dijo, se utiliza espacios de nombres.

    Recomiendo empezar a usar un IDE, le sugieren para importar todos los espacios de nombres necesarios (\App\Post en este caso).

  7. 0

    Asegúrese de tener cuidado al editar el archivo del modelo. Por ejemplo, en el modelo post:

    <?php 
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Post extends Model {
        protected $table = 'posts';    
    }

    Es necesario prestar mucha atención a la class Post extend Model línea. La clase Post definido aquí será su espacio de nombres para el controlador.

Dejar respuesta

Please enter your comment!
Please enter your name here