alvaro-prieto
6/2/2017 - 7:56 AM

listaExpandida

listaExpandida. Vídeo: https://youtu.be/P2EFJ2ULf8k?t=122

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(...)

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");