Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

[SOLUCIONADO] consulta a 3 trablas con eloquent

Estas en el tema de consulta a 3 trablas con eloquent en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola amigos, Necesito hacer una consulta a tres tablas con eloquent, pero solamente logro obtener información parcial, para ser más claro les pongo lo siguiente: ...
  #1 (permalink)  
Antiguo 17/02/2015, 18:00
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
consulta a 3 trablas con eloquent

Hola amigos,

Necesito hacer una consulta a tres tablas con eloquent, pero solamente logro obtener información parcial, para ser más claro les pongo lo siguiente:


Tengo las siguientes tablas:

Estudiantes:
->estudiante_id
->estudiante_nombre
->estudiante_apellido

Asignaturas:
->asignatura_id
->asignatura_nombre

EstudianteNotasAsig
->estudiante_id
->asignatura_id
->nota

Tengo los siguientes modelos:

Código PHP:
Ver original
  1. //Modelo Estudiante:
  2. class Estudiante extends Eloquent {
  3.  
  4.     protected $table = 'Estudiantes';
  5.     protected $primaryKey = 'estudiante_id';
  6.    
  7.     public function notas()
  8.     {
  9.         return $this->hasMany('EstudianteNotas', 'estudiante_id');
  10.     }  
  11. }
  12.  
  13. //Modelo Asignatura:
  14. class Asignatura extends Eloquent {
  15.  
  16.     protected $table = 'Asignaturas';
  17.    
  18.     protected $primaryKey = 'asignatura_id';
  19.    
  20.     public function notas()
  21.     {
  22.         return $this->hasMany('EstudianteNotas', 'asignatura_id');
  23.     }
  24. }
  25.  
  26. //Modelo EstudianteNotas:
  27. class EstudianteNotas extends Eloquent {
  28.  
  29.     protected $table = 'EstudianteNotasAsig';
  30.    
  31.     public function asignatura()
  32.     {
  33.         return $this->belongsTo('Asignatura', 'asignatura_id');
  34.     }
  35.    
  36.     public function estudiante()
  37.     {
  38.         return $this->belongsTo('Estudiante', 'estudiante_id');
  39.     }
  40.  
  41. }


Lo que quiero hacer es que dado un estudiante, quiero listar todas sus materias con sus respectivas notas, he aplicado lo siguiente:

Código PHP:
Ver original
  1. $est=Estudiante::find(1);
  2. $est->notas;

He logrado obtener solamente las notas de un estudiante, pero no logro obtener el nombre de las materias.

¿cómo podría obtener el nombre de las materias junto a cada nota?

Con Query Builder sé que es posible creando instrucciones sql, pero lo quiero hacer ocupando las relaciones entre objetos que he establecido.

Gracias desde ya por su ayuda.
  #2 (permalink)  
Antiguo 18/02/2015, 10:24
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: consulta a 3 trablas con eloquent

Para realizar lo que quieres, necesitas utilizar una relación muchos a muchos con tabla pivote. revisa los siguientes enlaces:
http://laravel.com/docs/5.0/eloquent#relationships
http://laravel.com/docs/5.0/eloquent#relationships
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 18/02/2015, 19:11
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
Respuesta: consulta a 3 trablas con eloquent

Hola hhs,

Gracias por responder, de hecho mi tabla pivote es EstudianteNotasAsig (Modelo EstudianteNotas), es la tabla unión entre Estudiantes(Modelo Estudiante) y Asignaturas(Asignatura)

Creería que los modelos estan bien, aunque no uso el nombre convencional de Laravel, pero por eso modifico la propiedad $table en cada uno pasándole el nombre de la respectiva tabla.

De hecho cuando ejecuto

Código PHP:
Ver original
  1. $est=Estudiante::find(1);
  2. $est->notas;

Me devuelve exactamente las notas que posee el estudiante (almacenadas en la tabla unión), el problema es que no logro obtener la información de de la tercera tabla pues no logro obtener el nombre de la asigntura a la que corresponde la nota del estudiante.


No sé si en realidad se deba a la cómo he establecido las relaciones en los modelos, según veo en la doc así se hace, o al momento de obtener la información del estudiante es que me falta algo.

Ese el detalle que no logro ver.

Saludos
  #4 (permalink)  
Antiguo 19/02/2015, 09:00
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: consulta a 3 trablas con eloquent

Lee los enlaces que te proporcione:
  1. Tus modelos no estan bien relacionados
  2. En tu ejemplo no estas usando pivotes (desde la perspectiva de Eloquent)
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Última edición por hhs; 19/02/2015 a las 09:14
  #5 (permalink)  
Antiguo 19/02/2015, 11:29
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
Respuesta: consulta a 3 trablas con eloquent

Muchas gracias por la aclaración,

Ya he logrado solventarlo pero aún tengo unas dudas, en resumidas cuentas los que estaba haciendo es relacionar uno a muchos pero cuando lo que necesito es muchos a muchos, es decir, belongsToMany

Según entiendo no necesito un modelo para la tabla pivote

Establecí el belongsToMany en el modelo Estudiante, según lo que leí veo que no es necesario establecerlo también en el modelo Asignatura, pues me funciona ¿Estoy en lo correcto? ¿Afectarí en algo si estableciera belongsToMany en el modelo Asignatura?


Gracia desde ya
  #6 (permalink)  
Antiguo 19/02/2015, 14:23
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: consulta a 3 trablas con eloquent

Si no requieres recuperar los alumnos a partir de la Asignatura no requieres establecer la relación inversa con belonsToMany
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 19/02/2015, 15:40
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
Respuesta: consulta a 3 trablas con eloquent

Gracias por la ayuda.

Saludos

Etiquetas: tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:16.