コード例 #1
0
 public function executeDuplicate()
 {
     $empresa = $this->getEmpresaOrCreate();
     //DUPLICAR LA EMPRESA
     $miempresa = new Empresa();
     $empresa->copyInto($miempresa);
     $miempresa->setNombre("Copia de " . $empresa->getNombre());
     $miempresa->save();
     $tablas_equiv = array();
     $campos_cambiar = array();
     //DUPLICAMOS TABLAS
     $tablas = $empresa->getTablas();
     foreach ($tablas as $tabla) {
         $mitabla = new Tabla();
         $tabla->copyInto($mitabla);
         $mitabla->setIdEmpresa($miempresa->getIdEmpresa());
         $mitabla->save();
         //GUARDAMOS LAS EQUIVALENCIAS DE LAS TABLAS PARA LUEGO CAMBIAR LAS RELACIONES
         $tablas_equiv[$tabla->getIdtabla()] = $mitabla->getIdTabla();
         $campos = $tabla->getRelCampoTablasJoinCampo();
         foreach ($campos as $camp) {
             $campo = $camp->getCampo();
             $items = $campo->getItemBases();
             $micampo = new Campo();
             $campo->copyInto($micampo);
             $micampo->setIdEmpresa($miempresa->getIdEmpresa());
             $micampo->save();
             if ($micampo->getTipo() == CampoPeer::ID_TABLA) {
                 $campos_cambiar[] = $micampo->getIdCampo();
             }
             //DUPLICAMOS ITEMS
             foreach ($items as $item) {
                 $miitem = new ItemBase();
                 $item->copyInto($miitem);
                 $miitem->setIdCampo($micampo->getIdCampo());
                 $miitem->save();
             }
             $micamp = new RelCampoTabla();
             $micamp->setIdCampo($micampo->getIdCampo());
             $micamp->setIdTabla($mitabla->getIdTabla());
             $micamp->save();
         }
     }
     //AHORA CAMBIAMOS LOS ENLACES A LAS TABLAS
     foreach ($campos_cambiar as $camp) {
         $campo = CampoPeer::retrieveByPk($camp);
         $campo->setValorTabla($tablas_equiv[$campo->getValorTabla()]);
         $campo->save();
     }
     return $this->redirect('tablas/list');
 }