public function crearTablaCatalogo(OrigenDatos $origenDato, array $datos) { //Recuperar la información para construir la tabla $em = $this->getEntityManager(); $nombre_tabla = $origenDato->getNombreCatalogo(); $campos = $origenDato->getCampos(); //Verificar si existe la tabla $sql = "CREATE TABLE IF NOT EXISTS {$nombre_tabla} ("; foreach ($campos as $campo) { $sql .= $campo->getNombre() . " " . $campo->getTipoCampo()->getCodigo(); if ($campo->getSignificado()->getCodigo() == 'pk') { $sql .= ' PRIMARY KEY '; $pk = $campo->getNombre(); } $sql .= ', '; } $sql = trim($sql, ', ') . '); '; //Crear tabla temporal para hacer un puente y validar antes de subir al catálogo $nombre_temp = $nombre_tabla . time(); $sql .= ' SELECT * INTO TEMP ' . $nombre_temp . ' FROM ' . $nombre_tabla . ' LIMIT 0;'; $nombre_campos = implode(", ", array_keys($datos[0])); $sql .= "\n INSERT INTO {$nombre_temp}({$nombre_campos}) VALUES "; foreach ($datos as $fila) { $sql .= "('" . implode("','", $fila) . "'), "; } $sql = trim($sql, ', '); // Si tiene llave primaria if ($pk != '') { //Insertar las que no están $sql .= "; INSERT INTO {$nombre_tabla} SELECT * FROM {$nombre_temp} WHERE {$pk} NOT IN (SELECT {$pk} FROM {$nombre_tabla})"; //Actualizar las que estaban $sql .= "; UPDATE {$nombre_tabla} SET"; foreach (array_keys($datos[0]) as $campo) { $sql .= " {$campo} = {$nombre_temp}.{$campo}, "; } $sql = trim($sql, ', '); $sql .= " FROM {$nombre_temp} WHERE {$nombre_tabla}.{$pk} IN (SELECT {$pk} FROM {$nombre_tabla}) \n AND {$nombre_tabla}.{$pk} = {$nombre_temp}.{$pk}"; } try { $em->getConnection()->exec($sql); } catch (\PDOException $e) { return $e->getMessages(); } return true; }
/** * {@inheritDoc} */ public function getCampos() { $this->__initializer__ && $this->__initializer__->__invoke($this, 'getCampos', array()); return parent::getCampos(); }
/** * @Route("/origen_dato/get_campos/{id}", name="origen_dato_get_campos", options={"expose"=true}) */ public function getCamposAction(OrigenDatos $origen) { $resp = '<h6>' . $this->get('translator')->trans('_campos_utilizables_en_campos_calculados_') . '</h6> <UL class="campos_disponibles">'; if ($origen->getEsFusionado() or $origen->getEsPivote()) { $campos = explode(',', str_replace(array(' ', "'"), '', $origen->getCamposFusionados())); foreach ($campos as $campo) { $resp .= '<LI><A href="javascript:funcion()">{' . $campo . '}</A></LI>'; } } else { $campos = $origen->getCampos(); foreach ($campos as $campo) { if ($campo->getSignificado()) { $resp .= '<LI><A href="javascript:funcion()">{' . $campo->getSignificado()->getCodigo() . '}</A></LI>'; } } } return new Response($resp . '</UL>'); }