Acceso a datos y generalidades (métodos comunes: lista añadeFiltro, apilaEstado,carga , orden, count cuenta ....) mas keywords: cargar ordenar contar filtrar filtro CRUD
/*---------------------------------------------------------------------------
En QUID las entidades de clases están mapeadas con tablas de base de datos.
Si la función en la que estamos está definida dentro de una entidad, podemos
acceder a la misma a través de $this-> pero también se puede crear una entidad
del tipo que sea, siempre por convenio con el mismo nombre y UpperCamelCase que la
clase a la que se refiere, ejemplo: $SoporteAplicaciones = new SoporteAplicaciones();
----------------------------------------------------------------------------*/
//INSERTAR
//Lo chulo del inserta, es que al mismo tiempo carga. Si insertas el actual irá a
[ $MiClase->datos->nombreCampo ]
$PersonalBanners->inserta([ //listado de campos de la tabla a insertar
"idCentro"=> $this->quid->idcentro() ,
"nombre"=> 'Boletín qPersonal'
]);
//PRIMERO UN EJEMPLO COMPLETO
$libros=new Libros($this->quid);
$libros->añadeFiltro("year(fecha)=2011"); //Selecciona los libros de un año determinado.
$libros->orden("paginas"); //Ordenados por tamaño
$libros->orden("paginas DESC"); //orden ordenacion inverso descenciente desc
$libros->agrupacion("autor"); //Agrupados por autor (sólo obtendremos un libro para cada autor)
$libros->limite(20); //Limitando a 20 resultados
$listado=$libros->lista(); //Obtiene un array con 20 libros (un por autor) del año 2011 y ordenados por nº de páginas
$ids = $libros->listaIds(); //Obtiene un array con los ids de los elementos
// a veces se utiliza para sacar un where in:
whereIn($Centro->listaIds()) // --> "('200','201','203')" util para cuando queremos hacer un in
$total = $libros->cuenta() //Devuelve el nº de registros del resultset (creo)
//CARGAR
$this->carga(5); //utiliza el id obviamente
$this->carga([ "nombre" => "juan", "sexo" => "masculino" ]); //también soporta
//cargar con una especie de where, util para cuando sabemos que hay un unico resultado
//Si hubiera multiples, carga unicamente el primero.
//una vez cargado un registro, se accede a los datos a traves de $this->datos,
//excepto el ID que si queremos está disponible directamente a través de $this->id
$ejemplo = $this->datos->nombre;
$idActual = $this->id;
//También es buena practica comprobar que efectivamente se ha cargado el registro:
$libros=new Libros();
$resultado=$libros->carga(134);
//También se puede hacer un carga pasandole un filtro
$ApiFunciones->carga(["clase" => $parametros["clase"],"funcion" => $parametros["funcion"]]);
//la forma alternativa es comprobando $resultado->id
if ($resultado)
{
echo "Se ha seleccionado el objeto";
}
else
{
echo "No existen ningún registro con clave principal 134";
}
//MODIFICAR
$this->modificaDato('nombre_campo',69); //siendo $this el objeto cargado y 69 el valor
//LISTAR
$this->lista(); //es como hacer un select *
$this->lista("nombre, apellidos"); //forma correcta: especificar las columnas que queremos
$this->cuenta(); //es un count tras un lista.
//LISTA UNO (me he encontrado esto)
$fechas= $webex_alumno->WebexMatriculas->Webex->listaUno('min(fechainicio) as fechaminima,max(fechafin) as fechamaxima');
//ORDEN
$this->orden("nombre"); //permite ordenar por una columna
//AÑADIR FILTROS
$this->añadeFiltro("id=5");
$this->SoporteUsuariosAplicaciones->SoporteColaboradores->añadeFiltro("activo=1");
$this->añadeFiltro("left(titulo,1)='E'"); //se pueden insertar condiciones de SQL,
//en este caso, elegir solo las filas cuyo titulo empiece por la letra 'E'
//también se pueden poner ands y otros wheres complejos
$Webex->añadeFiltro("idcentro = '5' and firma_electronica = '0' and horas_lectivas = '10.00' ");
//ElIMINAR FILTROS
$this->borraFiltro();
//LOS FILTROS SE VAN AGREGANDO A UNA PILA, EJEMPLO DE APILAESTADO
$SoporteColaboradores = new SoporteColaboradores();
$SoporteColaboradores->apilaEstado();
$SoporteColaboradores->añadeFiltro("nombre='Alicia'");
$SoporteColaboradores->añadeFiltro("apellidos='Hernandez'");
$listado = $SoporteColaboradores->lista("id,nombre,apellidos");
//var_dump($SoporteColaboradores->filtroActual());
//var_dump($listado);
$SoporteColaboradores->desapilaEstado();
//var_dump($SoporteColaboradores->filtroActual());
$listado2 = $SoporteColaboradores->lista("id,nombre,apellidos");
//var_dump($listado2);
//OTRO EJEMPLO DE AÑADE FILTRO, con una condición personalizada
//$this->relacion("InventariosEquiposInformaticos.idarticulo");
//Esta linea no tendría que ser necesaria, creo que principalmente para tablas polimorficas
$this->InventariosEquiposInformaticos->añadeFiltro("InventariosEquiposInformaticos.id=".$this->datos->id);
//OTRO EJEMPLO MÁS DE AÑADE FILTRO
$this->apilaEstado();
$this->añadeFiltro("idusuario_emisor=".$this->quid->idusuario());
$this->añadeFiltro("idusuario_receptor=".$parametros["idUsuarioReceptor"]);
$this->desapilaEstado();
//CASOS EXTRAÑOS
(Al menos aplica a cruces con la clase Archivo).
Cuando hay subclases hijas y se hace el cambio del filtro en una hija
el apilaEstado no coge el estado de las subclases hijas, por un fallo del framework.
En ese caso se utiliza esto:
$this->eliminaRelacion("Archivo");
(Siendo $this en este caso Webex)
//MODIFICAR GUARDAR CAMBIAR UPDATE ACTUALIZA GUARDA
$this->modificaDato("idPersonalReconocimiento", $insercion["id"]);
//también está la opción que guarda muchos datos en vez de uno solo, que va con array
$this->modificaDatos(["idPersonalReconocimiento" => $insercion["id"], "campo2" => $valor2]);
//EXPANDIR
//aun no me queda muy claro si es esto o no, lo iré definiendo cuando lo sepa mas seguro
$MisAutores=new MisAutores();
$MisAutores->MisLibros->MisCapitulos->lista("MisAutores.nombre,MisAutores.id,titulo");