Mover modelos de Laravel 5 Eloquent a su propio directorio

4 minutos de lectura

Laravel 5 tiene modelos ORM por defecto en la carpeta de la aplicación. Quiero moverlos a aplicaciones/modelos. Cuando hago eso, estas clases ya no se encuentran.

¿Cómo hacer que Laravel encuentre los modelos ORM Eloquent de la aplicación/modelos?

avatar de usuario
santo jugar

Solución para Laravel 5.6+


1. Mueva los archivos al nuevo directorio

Digamos que desea mover los modelos a app/Models

2. Cambiar el espacio de nombres de los modelos

Para cada cambio de modelo:

namespace App;

a

namespace App\Models;

3. Cambiar las referencias en otros archivos

Revisa estos archivos y busca especialmente app\User

  • app/Http/Controllers/Auth/RegisterController.php
  • config/auth.php
  • config/services.php
  • database/factories/ModelFactory.php
  • database/factories/UserFactory.php
  • Tus controladores

Y cambio App/ModelExample a App/Models/ModelExample

4. Carga automática de archivos

Correr composer dump-autoload

5. ¡Felicitaciones!

  • Acabo de actualizar a 5.4 y estaba luchando un poco. Excelentes instrucciones. Gracias.

    – David Hyogo

    6 de julio de 2017 a las 9:30

  • @SaintPlay Intenté los pasos anteriores pero no parecía funcionar correctamente. Como pocas páginas funcionaron cuando uso modelos dentro de un controlador. pero algunas de las páginas todavía arrojan App\ModelName Error. el modelo no parece reflejar el cambio. Un par de veces hice dump-autoload y también cache:clear, view:clear. ¿Cómo puedo depurar estos problemas?

    – Murlidhar Fichadia

    19 de febrero de 2018 a las 13:03

  • @SaintPlay Obtengo esto cuando hago composer dump-autoload Warning: Ambiguous class resolution, "App\Models\Company" was found in both "$baseDir . '/app/Models/Company.php" and "C:/Users/murli/laravel/Bookings/app/models/Company.php", the fi rst will be used.

    – Murlidhar Fichadia

    19 de febrero de 2018 a las 13:06

  • @MurlidharFichadia, ¿qué versión de laravel estás usando?

    – Santo Juego

    21 de febrero de 2018 a las 12:35

  • @SaintPlay Estoy usando Laravel 5.6, el más reciente. Tuve que revertir todo a los valores predeterminados. No pude mover todo el modelo a la carpeta de modelos. Hice php crafty confg:clear, cache:clear, view:clear

    – Murlidhar Fichadia

    21 de febrero de 2018 a las 12:37

Solo crea una carpeta llamada Models y mueve tus archivos a él. Después de eso, cambie el espacio de nombres de los modelos de solo App a App\Models (actualice los usos también) y ejecute composer dump-autoload.

  • composer dump-autoload faltaba y ahora funciona en combinación con composer.json autoload. No quería comenzar a cambiar los espacios de nombres de las clases.

    – Margus Pala

    14/03/2015 a las 19:38

  • No olvide cambiar el modelo de usuario para la autenticación si lo usa. Ver también aquí: laravel-recipes.com/recipes/11/…

    – algoritmo

    19 de marzo de 2015 a las 6:46

avatar de usuario
Dallín

Agregar "app/models" a la sección de carga automática del mapa de clase de composer.json

"autoload": {
    "classmap": [
        "database",
        "app/models"
    ]
}

  • Lo probé antes y no funcionó. Ahora funciona gracias a la sugerencia de lukasgeiter de usar composer dump-autoload que hizo que las clases se encontraran.

    – Margus Pala

    14/03/2015 a las 19:36

  • Gracias, esta actualización del compositor de consejos falta en otras soluciones que estaba leyendo, ¡pero es la que me funciona!

    – Maxcot

    30 de julio de 2016 a las 3:54

  • @Dallin Actualicé el compositor json como sugeriste. También seguí la respuesta de SaintPlay. pero no parecía funcionar correctamente. Como pocas páginas funcionaron cuando uso modelos dentro de un controlador. pero algunas de las páginas aún arrojan App\ModelName Error. el modelo no parece reflejar el cambio. Un par de veces hice dump-autoload y también cache:clear, view:clear. ¿Cómo puedo depurar estos problemas?

    – Murlidhar Fichadia

    19 de febrero de 2018 a las 13:04

  • @Dallin Obtengo esto cuando hago composer dump-autoload Warning: Ambiguous class resolution, "App\Models\Company" was found in both "$baseDir . '/app/Models/Company.php" and "C:/Users/murli/laravel/Bookings/app/models/Company.php", the fi rst will be used.

    – Murlidhar Fichadia

    19 de febrero de 2018 a las 13:06

  • Tuve exactamente el mismo problema y encontré que la solución radica en asegurarme de que las referencias sean 100% correctas. Cambiar “aplicación/modelos” a “aplicación/Modelos” me lo arregló.

    – Maxcot

    3 de junio de 2018 a las 8:51

Después de mover todos los archivos en la carpeta de modelos. Lo que tienes que hacer es ejecutar:


composer dump-autoload

Esto funcionó para mí. 🙂

Después de hacer los pasos de @Saint Play. Tenía que hacer php artisan config:clear. ¡Entonces funcionó!

¿Ha sido útil esta solución?