Duda sobre consultas relacionadas en el ORM Eloquent de Laravel
Hola comunidad, espero que estén muy bien, antes que todo les diré que busque en muchas partes, nunca pregunto nada pero esta es la ocasión que lo amerita.
- games
id
name (string)
- users (lo mismo que laravel)
id
email
password
etc
- privileges
id
name (string)
- game_user (relacion muchos a muchos con user y game
id
user_id
game_id
-privilege_users (aca es donde tengo problemas, te comento más abajo)
id
game_user_id
privilege_idTengo mis tablas:Todo bien con las primeras tablas, ejemplo un usuario puede tener muchos juegos y muchos juegos pueden pertenecer a varios usuarios. Eso lo tengo listo, muy fácil en Eloquent. Pero ahora a partir de la tabla game_user, es decir del juego que tiene el usuario quiero asignar los privilegios para dicho juego, es aqui donde no se como hacer. Ejemplo en el primer caso obtengo
$user = new App\Models\User();
$user->find(1)->games //Aca obtengo los juegos del usuario
Ahora si quisiera obtener los privilegios que tiene dicho usuario en ese juego, no sé como lo haría pero tipo
$user->find(1)->games[0]->privilegesIntenté de muchas formas, pero realmente no sé como relacionarlos, sé que el modelo de la bd está correcto.
Espero sus comentarios por favor
Saludos
Respuestas
Hola Felipe, lo que puedes hacer para este caso es usar la propiedad with sobre la consulta de Eloquent lo cual te trae los registros con los joins que requieras; entonces... aquí te pongo un ejemplo.
Ten en cuenta que supongo que hiciste bien las relaciones en los modelos de Eloquent, este código no lo puedo probar por el hecho que me presentas el ejemplo y necesitaria todo el flujo obvimente; entonces, pruébalo y cuéntame que pasa.
Esto debería bastar, si salta errores, revisa las relaciones de tu modelo, lo cual en realidad confío en que lo hayas hecho bien.
Espero te sirva, Saludos.
Recuerda que para recorrer los registros, tienes que hacerlo a través de las tablas intermedias, ya sea en bucles o de la mejor forma que sea según se te presente el caso. Para que veas mejor la estructura de los registros tal cual lo carga en el array resultante, puedes imprimir la variable donde se almacena con la función var_dump de la siguiente maner.
donde esto te mostrará toda la estructura del objeto.
Ese error tengo
Al parecer no hiciste las relaciones... así como creas las relaciones en las tablas de SqlServer o MySql también debes crear las relaciones para cada modelo en eloquent.
Como ejemplo te dejo esta clase donde se relacionan algunos modelos.
donde cada función de la clase es la relación con la tabla en la base de datos, claro, a través de las otras clases "Modelos" de Eloquent.
belongsTo para relación con el padre del modelo actual y hasMany para la relación de los hijos del modelo actual. En este caso sólo es el modelo usuario con la relación de uno a muchos hacia el modelo reciboventa y usuario con personal siendo este último el padre.
Recuerda que debes hacer este tipo de relaciones para cada relación física en tu base de datos a través de los modelos del ORM.
Corrección en la consulta, me equivoque una parte... prueba con eso.