listaExpandida. Vídeo: https://youtu.be/P2EFJ2ULf8k?t=122
IMPORTANTE: La lista expandida siempre empieza desde la clase en la que queremos que haya un registro por fila. Es decir:
MisLibros->lista() tendrá el mismo numero de líneas que MisLibros->listaExpandida(....)
Josean me ha dicho que existe una limitacion en el framework, y es que no se puede pasar por la misma clase dos veces. Hay que tenerlo en cuenta! Normalmente se puede solucionar haciendo dos queries en vez de una , con la primera se sacan los id de lo que sea, y en la segunda se utiliza un in(...)
$listado = $this->HubPreguntasOpciones->listaExpandida("
id as id,
HubPreguntas.id as idPregunta,
HubPreguntas.pregunta as pregunta,
opcion as opcion,
id as idOpcion,
HubPreguntasConectores.id as idConector");
Resultado (truncado):
array (size=10)
2 =>
array (size=6)
'id' => string '2' (length=1)
'idPregunta' => string '2' (length=1)
'pregunta' => string '¿Quieres asesoramiento sobre cómo innovar en tu asignatura?' (length=61)
'opcion' => string 'Sí, pero no sé cómo' (length=22)
'idOpcion' => string '2' (length=1)
'idConector' => string '4, 6' (length=4) // <-- ves! se han unido!
4 =>
array (size=6)
'id' => string '4' (length=1)
'idPregunta' => string '2' (length=1)
'pregunta' => string '¿Quieres asesoramiento sobre cómo innovar en tu asignatura?' (length=61)
'opcion' => string 'Sí, sobre aprendizaje activo' (length=29)
'idOpcion' => string '4' (length=1)
'idConector' => string '2,4,6' (length=2) // <-- ves! se han unido!
Lista expandida es bastante poderoso. Vídeo: https://youtu.be/P2EFJ2ULf8k?t=122
Se basa en en el cocepto de las relaciones,
pero no es necesario indicar todas las relaciones de las cuales queremos obtener
información.
Así si por ejemplo necesitamos información sobre un libro y sobre su autor,
normalmente podríamos tener relaciones así:
$Libro->Autores->Libros->Capitulos->lista(...)
para asi poder acceder a info del autor, y de los capitulos.
Con Lista expandida es más cómod porque podemos realizar las ramas de expansión
dentro del lista, de manera que evitamos algunos problemas y es todo más fácil:
$Libro->listaExpandida("Libro.Autor.nombre as nombreAutor, Libro.Capitulos.loquesea");
Ejemplos reales:
En este ejemplo, queremos información de los reconocimientos del ultimo mes, pero
para ello necesitamos acceder a SgicNodos texto. Podemos expandirlo directamente
en el campo como veremos aquí:
$this->SgicTareas->PersonalReconocimiento->apilaEstado();
$hoy = new Fecha();
$this->SgicTareas->PersonalReconocimiento->añadeFiltro("DATEDIFF('{$hoy->mysqlCompleto()}', PersonalReconocimiento.fecha) <=30");
$lista = $this->SgicTareas->PersonalReconocimiento->lista("count(*) as 'countUltimoMes");
$ultimoMes = current($lista)["countUltimoMes"];
$reconocimientosDelMes = $this->SgicTareas->PersonalReconocimiento->listaExpandida("reconocimiento, idusuario_emisor as idemisor, id, SgicTareas.Usuario.nombre as nombreReceptor, SgicTareas.Usuario.apellidos as apellidosReceptor, 'qProcesos' as entidad, SgicTareas.SgicNodos.texto as descripcion");
$this->SgicTareas->PersonalReconocimiento->desapilaEstado();
Otro ejemplo, queremos todos los logros, ordenados por fecha, con información sobre
quien los ha conseguido.
$PersonalLogros = new PersonalLogros();
$logros = $PersonalLogros->PersonalLogrosUsuarios->orden("fecha desc");
$logros = $PersonalLogros->PersonalLogrosUsuarios->listaExpandida("PersonalLogros.id as id, PersonalLogros.logro as logro, PersonalLogros.descripcion as descripcion, PersonalLogros.icono as icono, PersonalLogros.color as color, PersonalLogros.oculto as oculto, PersonalLogros.tipo as tipo, PersonalLogrosUsuarios.Usuario.nombre as nombre, PersonalLogrosUsuarios.Usuario.apellidos as apellidos, PersonalLogrosUsuarios.fecha as fecha, PersonalLogrosUsuarios.idusuario as idreceptor");