Problema
He estado tratando de obtener un modelo Eloquent de la base de datos, pero sigo entrando en BadMethodCallExceptionMethod [buscar]
no existe.
Esto es lo que intenté hasta ahora:
Aplicación de espacio de nombres;use Illuminate \ Database \ Eloquent \ Model;
use App \ Organization;
clase El usuario extiende el modelo
/ **
* La tabla de la base de datos utilizada por el modelo.
*
* @var cadena
* /
protegido $ tabla = 'usuarios';
/ **
* Los atributos excluidos del formulario JSON del modelo.
*
* @var matriz
* /
protegido $ oculto = matriz ('contraseña');
organizaciones de función pública ()
return $ esto-> pertenece a muchos (Organización :: clase);
Esta es una clase de usuario básica que viene con cada nuevo proyecto de Laravel. Después de crear un nuevo usuario, puedo ver claramente que el usuario con ID3 existe en la base de datos. Sin embargo, cuando hago lo siguiente, termino con el El método BadMethodCallException [buscar] no existe
función pública getUser ($ id)
$ my_user = Usuario :: buscar ($ id);
vista de retorno ('usuarios.índice ', matriz (' usuario '=> $ mi_usuario));
Mis rutas archivo rutas \ web.php:
Route :: get ('usuario / id', '[correo electrónico protegido]');Ruta :: obtener ('/', función ()
return View :: make ('prueba');
);
Solución
Hay algunos problemas con esta implementación que pueden hacer que reciba El método BadMethodCallException [buscar] no existe
excepción.
- Debe seguir las mejores prácticas para nombrar sus controladores como su modelo + palabra "Controlador" para que termine con un UserController en lugar de solo User .
- La clase de usuario a la que se refiere aquí no está realmente relacionada con su modelo de aplicación \ usuario. Si lo nota, nunca incluyó explícitamente su modelo. Entonces, asumiendo que ya solucionó el punto anterior, necesitaría incluir la clase de usuario en su UserController . Solo entonces puedes crear nuevos objetos usando esa clase. Entonces, en su UserController, vaya y agregue use App \ User; en la cima. (Observe cómo incluí Aplicación \ Organización)
- Una vez que lo haya solucionado, debe ejecutar composer dump -o para regenerar composer.archivo de bloqueo que ayudará a acelerar la carga de sus clases.
Después de hacerlo, debería poder acceder a su modelo de aplicación \ usuario como pretendía.
Explicación adicional (solo para fines educativos)
Como sabes, el desarrollo web nunca tuvo la intención de ser un espectáculo unipersonal. Por lo general, puede esperar colaborar con otros desarrolladores aproximadamente el 90% del tiempo. Para que el proyecto tenga éxito, debe asegurarse de que todos sigan las reglas generales de codificación.
Una de las reglas será sobre convenciones de nomenclatura y entiendo que mantenerse al día con una convención de nomenclatura definida requiere mucho esfuerzo y puede potencialmente perder mucho tiempo del equipo hasta que todos puedan entenderlas y seguirlas. Esto es especialmente difícil para los nuevos desarrolladores que se unen al equipo.
Le sugiero que intente leer más código de otras personas antes de comenzar a escribir el suyo, solo para tener una idea de las mejores prácticas de la industria.
Algunas reglas son obligatorias y otras se dejan en manos del equipo para decidir cómo quieren abordar.
Al observar el problema desde arriba, notará que todas las clases deben escribirse en StudlyCaps, por lo que UserController y no user_controller .
Y este es un ejemplo de una regla obligatoria a seguir.
Ahora, un ejemplo de lo que usted como equipo podría definir como su regla interna es cómo nombrar sus clases, métodos y variables.
Si se espera que un proyecto crezca con el tiempo, ciertamente puede esperar muchas entidades diferentes que de una forma u otra incluyen un Usuario, por lo que es importante que no se le ocurran nombres vagos para sus clases, métodos y variables.
Mi consejo personal aquí es; no tenga miedo de tener una clase más larga o un nombre de método. Si necesita un comentario que explique su método, entonces el nombre de su método probablemente pueda ser mejor.
Un ejemplo de esto es que si necesita obtener usuarios de una base de datos con alguna condición adicional, tal vez sean usuarios mayores de 50 años, entonces no nombre su método getUsers . Una mejor manera de nombrarlo es getAllUsersOver50YearsOld .