entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Modelos y migraciones en laravel 5

Saludos

Estoy probando laravel en la versión 5, y veo que existe muchos cambios en la estructura de directorios y demas. Tengo una pregunta:

Cree un modelo llamado Category y tengo esta estructura:

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

 class Category extends Eloquent {

protected $table = 'categories';
}

Ahora lo quiero mostrar todos los registros que tiene esa clase que apunta a una tabla llamado categories, algo asi lo tengo en el controlador

 $categories = Category::all();
return view('welcome',['categories' => $categories]);

Ahora bien me dice y bota este error

FatalErrorException in HomeController.php line 26:
Class 'app\Category' not found

la linea 26 es $categories = Category::all();
Mi pregunta es por que no funciona, si en la versión 4.2 me funcionaba casi igual, tengo este ejemplo que yo hice en la versión 4.2:
https://github.com/nmenag/laravel-demo.

Y veo otras forma de hacerlo y no me quiere funcionar.

Gracias.

1 Respuesta

1voto

white Puntos75820

donde se encuentra el fichero de tu clase Category? se encuentra en la ruta "app/Category.php" ?

estas importando el modelo Category a tu controlador?

<?php namespace App\Http\Controllers;

use App\Category;

intenta con el comando:

composer dump-autoload

y nos cuentas despues.

0voto

nmenag comentado

Ya lo solucione poniendo esto en el controlador:

use App\Category;
use App\Http\Requests;
use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

le puse solo esto use App\Category; y bota error en esa linea.

Gracias por tu respuesta.

0voto

nmenag comentado

realice el comando composer dump-autoload y me modifica siempre unos archivos y se ve cuando hago un git status:

modified:   vendor/autoload.php
modified:   vendor/composer/autoload_classmap.php
modified:   vendor/composer/autoload_real.php

Otra cosa eso no dice nada en la pagina oficial de como llamar los modelos para funcione en los controladores. ¿Como hago para que no tenga que volver a llamar los modelos para cada controlador ?. Gracias.

0voto

white comentado

dump autoload mapea las clases que hayamos agregado para el autoload. para eso debes agregar a composer.json la ruta, por ejemplo:

"autoload": {
    "classmap": [
        "app/Models"
    ]
},

si te es tedioso usar use \App\Category; agregra un alias a /config/app.php

<?php

/*
|--------------------------------------------------------------------------
| Class Aliases
|--------------------------------------------------------------------------
|
| This array of class aliases will be registered when this application
| is started. However, feel free to register as many as you wish as
| the aliases are "lazy" loaded so they don't hinder performance.
|
*/

'aliases' => [
    'Category'  => 'App\Category'
],

y lo usas asi en el controlador:

\Category::all();

fijate que puse el carácter \, es por que en el controlador el nombre de espacio puede ser definido,

namespace App\Http\Controllers;

si no agregas esto se asumirá que estas llamando a : App\Http\Controllers\Category

saludos!

PD: si tienes dudas sobre que cambio en laravel 5, aca hay una guía para migrar http://mattstauffer.co/blog/upgrading-from-laravel-4-to-laravel-5

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta