alvaro-prieto
4/27/2017 - 10:53 AM

CRUD PHP (carga lista añadeFiltro, inserta, borra, modifica, apilaEstado,carga , orden, count cuenta, insertar, borrar, modificar)

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' ");
  
  
//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();


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